1. 2008/05 backplane.c
1.1. gblSupportRaid = TRUE
1.2. manutild or scemd or --help
1.2.1. return
1.3. (2,6,15)
1.3.1. Fan, disk, volumn
1.4. SYNOSupportUart2()
1.4.1. open & config
1.5. 檢查完成/main開始
1.6. timer get&set
1.7. cashe enable
2. 2009/03 Marvell BSP 422
2.1. 3/18了解流程
2.1.1. module
2.1.1.1. Scsi_Host_Template driver_template=SynoMvSata;
2.1.1.2. module_init(mv_ial_init);
2.1.1.2.1. mv_ial_init() (決定 7042 & 6281 的順序)
2.1.1.3. module_exit(mv_ial_exit);
2.1.1.3.1. mv_ial_exit()
2.1.1.4. MODULE_DEVICE_TABLE(pci,mvSata_pci_table);
2.1.2. #define SynoMvSata
2.1.2.1. #define SynoMvSata \ { \ module: THIS_MODULE,\ proc_name: "mvSata", /* proc_name */ \ proc_info: mv_ial_ht_proc_info, /*proc info fn */ \ slave_configure: mv_ial_ht_slave_configure,\ name: "Marvell SCSI to SATA adapter", /*name*/ \ release: mv_ial_ht_release, /*release fn*/ \ queuecommand: mv_ial_ht_queuecommand, /*queuecommand fn*/ \ bios_param: NULL /*mv_ial_ht_biosparam*/,/*bios fn*/ \ eh_device_reset_handler: NULL/*mv_ial_ht_dev_reset*/, \ eh_bus_reset_handler: mv_ial_ht_bus_reset, \ eh_abort_handler: mv_ial_ht_abort, \ can_queue: MV_SATA_SW_QUEUE_SIZE, /* unlimited */ \ this_id: MV_SATA_PM_MAX_PORTS, /*set by detect*/ \ sg_tablesize: 64, /*sg_tablesize*/ \ max_sectors: 256, \ cmd_per_lun: MV_SATA_SW_QUEUE_SIZE, /*cmd_per_lun*/ \ unchecked_isa_dma: 0, /*32-Bit Busmaster*/\ emulated: 1, /* not real scsi adapter */ \ SYNO_INDEX_GET \ SYNO_SHUTDOWN_PORT \ shost_attrs: mvSata_shost_attrs, \ use_clustering: ENABLE_CLUSTERING /*use_clustering*/ \ }
2.1.2.1.1. mv_ial_ht_bus_reset()
2.1.2.1.2. mv_ial_ht_queuecommand()
2.1.2.1.3. mv_ial_ht_abort()
2.1.2.1.4. mv_ial_ht_release()
2.1.2.1.5. SYNO_SHUTDOWN_PORT =syno_mvSata_port_power_ctl
2.1.2.2. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) #define mvSata \ { \ proc_name: "mvSata", /* proc_name */ \ proc_info: mv_ial_ht_proc_info24, /*proc info fn */ \ select_queue_depths: NULL, \ name: "Marvell SCSI to SATA adapter", /*name*/ \ detect: mv_ial_ht_detect, /*detect fn*/ \ release: mv_ial_ht_release, /*release fn*/ \ 。。。
2.1.2.2.1. mv_ial_ht_detect()
2.1.2.2.2. mv_ial_ht_release()
2.1.3. pci_driver mv_ial_pci_driver
2.1.3.1. pci_driver mv_ial_pci_driver = { .name = mv_hot_plug_name, .id_table = mvSata_pci_table, .probe = mv_ial_probe_device, .remove = __devexit_p(mv_ial_remove_device), };
2.1.3.1.1. mv_ial_probe_device()
2.1.3.1.2. mv_ial_remove_device()
2.2. The Role
2.2.1. SCSI host
2.2.2. SATA Adapter
2.2.2.1. channel
2.2.2.1.1. SATA device
2.2.2.1.2. port multiplier
2.3. The Data Structure (*.h)
2.3.1. IAL_ADAPTER_T
2.3.1.1. MV_SATA_ADAPTER
2.3.1.1.1. MV_SATA_CHANNEL
2.3.1.2. IALHost[]
2.3.1.3. pci_dev
2.3.1.4. MV_IAL_COMMON_ADAPTER_EXTENSION
2.3.1.4.1. MV_SATA_ADAPTER
2.3.1.4.2. MV_ADAPTER_STATE
2.3.1.4.3. MV_CHANNEL_STATE[]
2.3.1.4.4. MV_IAL_COMMON_CHANNEL_EXTENSION[]
2.3.1.5. MV_SAL_ADAPTER_EXTENSION
2.3.1.5.1. MV_SATA_SCSI_DRIVE_DATA[][]
2.3.1.5.2. MV_SATA_SCSI_CMD_BLOCK
2.3.1.5.3. MV_SATA_SCSI_DRIVE_DATA
2.4. CLASS_DEVICE_ATTR(syno_pm_gpio, S_IRUGO | S_IWUGO, syno_pm_gpio_show, syno_pm_gpio_store);
2.4.1. syno_pm_gpio_show()
2.4.1.1. defer_gpio_cmd()
2.4.2. syno_pm_gpio_store()