Correct one typo....
>Please see answer in line. > > > >>This SCSI HBA driver is for IOP based HBA. The driver will just pass >>SCSI command to >> >>IOP and then get status back from interrupt when it is done. During >>debugging I found >> >>Several issues >> >>(1) Will DDI_ATTACH get timeout? I found DDI_ATTACH keep coming when >>my current DDI_ATTACH >> >>is still running initialization. How to prevent that? And if I have >>multiple HBAs at the >> >>same time, what will be the behavior? >> >> >> >If you have multiple HBA instance, the DDI_ATTACH will be called several >times for each instance > If you have multiple HBA instances, the DDI_ATTACH will be called once for each instances during your add_drv. ;) >. >I am not sure if you have global resource shared by multiple instance, >if you want to protect access >global resource shared by multiple instance in your driver, you should >use mutex or condition variable >to protect and synchronize. As for why you saw multiple DDI_ATTACH >arrive is because during solaris driver >configuration devices use multiple threads asynchronized by calling mt_xxxx. > > > >>(2) During ddi_tran_tgt_init(), I saw a sequence of calling >>target_id=0 .. 15 then again >> >>Target_id=0 ..15, then target_id=0..7 then target_id=0..7. Is it correct? >> >> >> >That's correct. I guess you used "scsi" as your driver class. So the >children enumeration would >be relies on .conf file of target drivers. So what you saw is because >solaris enumerate/configure >children of your HBA according sd.conf, st.conf, sgen.conf, ses.conf. > > > >>(3) Since our IOP will handle all commands physically, the HBA just >>programs DMA handle for >> >>every command. In ddi_tran_init_pkt(), HBA does >>ddi_dma_alloc_handle(),and >> >>ddi_dma_buf_bind_handle() to get DMA physical address, dma size. Hence >>in ddi_tran_start(), >> >>will fill in this dma_cookie pointer content to mailbox. Do I process >>it correctly? >> >> >> >You process correctly. > > > >>Later the command is done and return “good” status on SCSI Identify >>command. But I keep >> >>seeing kernel send SCSI identify for this target again. This confuses >>me and it seems the >> >>kernel is not receiving the data. >> >> >> >Sorry, I have never heard SCSI Identify command, which command you are >referring? >INQUIRY(0x12), right? You can trace your tran_tgt_probe() routine and >watch the return value. >See if the value return successfully or not. Otherwise, some problem >exist in your code. >Anyway, let's see the your tran_tgt_probe return value for the specific >target firstly. > >Javen >_______________________________________________ >driver-discuss mailing list >driver-discuss@opensolaris.org >http://mail.opensolaris.org/mailman/listinfo/driver-discuss > > > _______________________________________________ driver-discuss mailing list driver-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/driver-discuss