学习心得:第一步看该驱动所有头文件,学习对象成员结构体。看看内核源码是怎么设计的,我们举一反三,自我学习并运用于自己写的的内核代码驱动中。
1.pm8001驱动相关对象
(1)相关头文件,所涉及的对象和枚举
/drivers/scsi/pm8001/pm8001_hwi.h
/drivers/scsi/pm8001/pm8001_defs.h
/drivers/scsi/pm8001/pm80xx_hwi.h
/drivers/scsi/pm8001/pm8001_sas.h
/drivers/scsi/pm8001/pm8001_hwi.h
@||- struct
@||| mpi_msg_hdr
@||| phy_start_req
@||| phy_stop_req
@||| set_dev_bits_fis
@||| pio_setup_fis
@||| sata_completion_resp
@||| hw_event_resp
@||| reg_dev_req
@||| dereg_dev_req
@||| dev_reg_resp
@||| local_phy_ctl_req
@||| local_phy_ctl_resp
@||| port_ctl_req
@||| hw_event_ack_req
@||| ssp_completion_resp
@||| sata_event_resp
@||| ssp_event_resp
@||| general_event_resp
@||| smp_req
@||| smp_completion_resp
@||| task_abort_req
@||| task_abort_resp
@||| sas_diag_start_end_req
@||| sas_diag_execute_req
@||| set_dev_state_req
@||| sas_re_initialization_req
@||| sata_start_req
@||| ssp_ini_tm_start_req
@||| ssp_info_unit
@||| ssp_ini_io_start_req
@||| fw_flash_Update_req
@||| fw_flash_Update_resp
@||| get_nvm_data_req
@||| set_nvm_data_req
@||| get_nvm_data_resp
@||| sas_diag_start_end_resp
@||| sas_diag_execute_resp
@||| set_dev_state_resp
/drivers/scsi/pm8001/pm80xx_hwi.h
@||- struct
@||| mpi_msg_hdr
@||| phy_start_req
@||| phy_stop_req
@||| set_dev_bits_fis
@||| pio_setup_fis
@||| sata_completion_resp
@||| hw_event_resp
@||| thermal_hw_event
@||| reg_dev_req
@||| dereg_dev_req
@||| dev_reg_resp
@||| local_phy_ctl_req
@||| local_phy_ctl_resp
@||| port_ctl_req
@||| hw_event_ack_req
@||| phy_start_resp
@||| phy_stop_resp
@||| ssp_completion_resp
@||| sata_event_resp
@||| ssp_event_resp
@||| general_event_resp
@||| smp_req
@||| smp_completion_resp
@||| task_abort_req
@||| task_abort_resp
@||| sas_diag_start_end_req
@||| sas_diag_execute_req
@||| set_dev_state_req
@||| sata_start_req
@||| ssp_ini_tm_start_req
@||| ssp_info_unit
@||| ssp_ini_io_start_req
@||| ssp_dif_enc_io_req
@||| fw_flash_Update_req
@||| fw_flash_Update_resp
@||| get_nvm_data_req
@||| set_nvm_data_req
@||| set_ctrl_cfg_req
@||| get_ctrl_cfg_req
@||| kek_mgmt_req
@||| dek_mgmt_req
@||| set_phy_profile_req
@||| get_phy_profile_req
@||| ext_flash_partition_req
@||| get_nvm_data_resp
@||| sas_diag_start_end_resp
@||| sas_diag_execute_resp
@||| set_dev_state_resp
@||| set_ctrl_cfg_resp
@||| get_ctrl_cfg_resp
@||| kek_mgmt_resp
@||| dek_mgmt_resp
@||| get_phy_profile_resp
@||| flash_op_ext_resp
@||| set_phy_profile_resp
@||| ssp_coalesced_comp_resp
@||| SASProtocolTimerConfig
/drivers/scsi/pm8001/pm8001_defs.h
@||- enum
@||| chip_flavors
@||| phy_speed
@||| data_direction
@||| port_type
@||| memory_region_num
@||| mpi_err
@||| phy_control_type
@||| pm8001_hba_info_flags
/drivers/scsi/pm8001/pm8001_sas.h
@||- struct
@||| pm8001_tmf_task
@||| pm8001_ioctl_payload
@||| pm8001_dispatch
@||| pm8001_chip_info
@||| pm8001_port
@||| pm8001_phy
@||| pm8001_device
@||| pm8001_prd_imt
@||| pm8001_prd
@||| pm8001_ccb_info
@||| mpi_mem
@||| mpi_mem_req
@||| encrypt
@||| sas_phy_attribute_table
@||| inbound_queue_table
@||| outbound_queue_table
@||| pm8001_hba_memspace
@||| pm8001_hba_info
@||| pm8001_work
@||| pm8001_fw_image_header
@||| fw_flash_updata_info
@||| fw_control_info
@||| fw_control_ex