• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/scsi/aic94xx/

Lines Matching defs:asd_ha

127  * @asd_ha: pointer to the host adapter structure
134 static int asd_read_ocm_seg(struct asd_ha_struct *asd_ha, void *buffer,
138 if (unlikely(asd_ha->iospace))
139 asd_read_reg_string(asd_ha, buffer, offs+OCM_BASE_ADDR, size);
142 *p = asd_read_ocm_byte(asd_ha, offs);
147 static int asd_read_ocm_dir(struct asd_ha_struct *asd_ha,
150 int err = asd_read_ocm_seg(asd_ha, dir, offs, sizeof(*dir));
172 * @asd_ha: pointer to the host adapter structure
179 static void asd_write_ocm_seg(struct asd_ha_struct *asd_ha, void *buffer,
183 if (unlikely(asd_ha->iospace))
184 asd_write_reg_string(asd_ha, buffer, offs+OCM_BASE_ADDR, size);
187 asd_write_ocm_byte(asd_ha, offs, *p);
215 static int asd_get_bios_chim(struct asd_ha_struct *asd_ha,
233 err = asd_read_ocm_seg(asd_ha, (void *)bc_struct, offs,
254 asd_ha->hw_prof.bios.present = 1;
255 asd_ha->hw_prof.bios.maj = bc_struct->bios_major;
256 asd_ha->hw_prof.bios.min = bc_struct->bios_minor;
257 asd_ha->hw_prof.bios.bld = le32_to_cpu(bc_struct->bios_build);
259 asd_ha->hw_prof.bios.maj,
260 asd_ha->hw_prof.bios.min,
261 asd_ha->hw_prof.bios.bld);
263 asd_ha->hw_prof.ue.num = le16_to_cpu(bc_struct->ue_num);
264 asd_ha->hw_prof.ue.size= le16_to_cpu(bc_struct->ue_size);
265 ASD_DPRINTK("ue num:%d, ue size:%d\n", asd_ha->hw_prof.ue.num,
266 asd_ha->hw_prof.ue.size);
267 size = asd_ha->hw_prof.ue.num * asd_ha->hw_prof.ue.size;
270 asd_ha->hw_prof.ue.area = kmalloc(size, GFP_KERNEL);
271 if (!asd_ha->hw_prof.ue.area)
273 err = asd_read_ocm_seg(asd_ha, (void *)asd_ha->hw_prof.ue.area,
276 kfree(asd_ha->hw_prof.ue.area);
277 asd_ha->hw_prof.ue.area = NULL;
278 asd_ha->hw_prof.ue.num = 0;
279 asd_ha->hw_prof.ue.size = 0;
290 asd_hwi_initialize_ocm_dir (struct asd_ha_struct *asd_ha)
296 asd_write_ocm_dword(asd_ha, i, 0);
299 asd_write_ocm_seg(asd_ha, &OCMDirInit, 0,
304 asd_write_ocm_seg(asd_ha, &OCMDirEntriesInit[i],
312 asd_hwi_check_ocm_access (struct asd_ha_struct *asd_ha)
314 struct pci_dev *pcidev = asd_ha->pcidev;
320 reg = asd_read_reg_dword(asd_ha, EXSICNFGR);
343 asd_hwi_initialize_ocm_dir(asd_ha);
352 * @asd_ha: pointer to the host adapter structure
354 int asd_read_ocm(struct asd_ha_struct *asd_ha)
359 if (asd_hwi_check_ocm_access(asd_ha))
368 err = asd_read_ocm_dir(asd_ha, dir, 0);
372 err = asd_get_bios_chim(asd_ha, dir);
529 static int asd_poll_flash(struct asd_ha_struct *asd_ha)
535 d = asd_read_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar);
536 d ^= asd_read_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar);
544 static int asd_reset_flash(struct asd_ha_struct *asd_ha)
548 err = asd_poll_flash(asd_ha);
551 asd_write_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar, FLASH_RESET);
552 err = asd_poll_flash(asd_ha);
557 static int asd_read_flash_seg(struct asd_ha_struct *asd_ha,
560 asd_read_reg_string(asd_ha, buffer, asd_ha->hw_prof.flash.bar+offs,
567 * @asd_ha: pointer to the host adapter structure
573 static int asd_find_flash_dir(struct asd_ha_struct *asd_ha,
578 asd_read_flash_seg(asd_ha, flash_dir, v,
582 asd_ha->hw_prof.flash.dir_offs = v;
583 asd_read_flash_seg(asd_ha, flash_dir, v,
591 static int asd_flash_getid(struct asd_ha_struct *asd_ha)
596 reg = asd_read_reg_dword(asd_ha, EXSICNFGR);
598 if (pci_read_config_dword(asd_ha->pcidev, PCI_CONF_FLSH_BAR,
599 &asd_ha->hw_prof.flash.bar)) {
601 pci_name(asd_ha->pcidev));
604 asd_ha->hw_prof.flash.present = 1;
605 asd_ha->hw_prof.flash.wide = reg & FLASHW ? 1 : 0;
606 err = asd_reset_flash(asd_ha);
669 static int asd_ms_get_sas_addr(struct asd_ha_struct *asd_ha,
672 memcpy(asd_ha->hw_prof.sas_addr, ms->sas_addr, SAS_ADDR_SIZE);
676 static int asd_ms_get_pcba_sn(struct asd_ha_struct *asd_ha,
679 memcpy(asd_ha->hw_prof.pcba_sn, ms->pcba_sn, ASD_PCBA_SN_SIZE);
680 asd_ha->hw_prof.pcba_sn[ASD_PCBA_SN_SIZE] = '\0';
715 * @asd_ha: pointer to the host adapter structure
733 static int asd_ms_get_phy_params(struct asd_ha_struct *asd_ha,
772 asd_ha->hw_prof.enabled_phys = 0;
781 asd_ha->hw_prof.enabled_phys &= ~(1 << i);
786 asd_ha->hw_prof.enabled_phys |= (1 << i);
790 asd_ha->hw_prof.phy_desc[i].phy_control_0 = pd->phy_control_0;
791 asd_ha->hw_prof.phy_desc[i].phy_control_1 = pd->phy_control_1;
792 asd_ha->hw_prof.phy_desc[i].phy_control_2 = pd->phy_control_2;
793 asd_ha->hw_prof.phy_desc[i].phy_control_3 = pd->phy_control_3;
795 asd_ha->hw_prof.max_phys = rep_phys + en_phys;
796 asd_ha->hw_prof.num_phys = en_phys;
798 asd_ha->hw_prof.max_phys, asd_ha->hw_prof.num_phys);
799 ASD_DPRINTK("ms: enabled_phys:0x%x\n", asd_ha->hw_prof.enabled_phys);
803 static int asd_ms_get_connector_map(struct asd_ha_struct *asd_ha,
827 * @asd_ha: pointer to the host adapter structure
830 static int asd_process_ms(struct asd_ha_struct *asd_ha,
853 err = asd_read_flash_seg(asd_ha, (void *)manuf_sec, offs, size);
866 err = asd_ms_get_sas_addr(asd_ha, manuf_sec);
872 SAS_ADDR(asd_ha->hw_prof.sas_addr));
874 err = asd_ms_get_pcba_sn(asd_ha, manuf_sec);
879 ASD_DPRINTK("manuf sect PCBA SN %s\n", asd_ha->hw_prof.pcba_sn);
881 err = asd_ms_get_phy_params(asd_ha, manuf_sec);
887 err = asd_ms_get_connector_map(asd_ha, manuf_sec);
899 static int asd_process_ctrla_phy_settings(struct asd_ha_struct *asd_ha,
906 if (!PHY_ENABLED(asd_ha, i))
909 asd_ha->hw_prof.enabled_phys &= ~(1 << i);
913 memcpy(asd_ha->hw_prof.phy_desc[i].sas_addr, pe->sas_addr,
915 asd_ha->hw_prof.phy_desc[i].max_sas_lrate =
917 asd_ha->hw_prof.phy_desc[i].min_sas_lrate =
919 asd_ha->hw_prof.phy_desc[i].max_sata_lrate =
921 asd_ha->hw_prof.phy_desc[i].min_sata_lrate =
923 asd_ha->hw_prof.phy_desc[i].flags = pe->flags;
927 SAS_ADDR(asd_ha->hw_prof.phy_desc[i].sas_addr),
928 asd_ha->hw_prof.phy_desc[i].max_sas_lrate,
929 asd_ha->hw_prof.phy_desc[i].min_sas_lrate,
930 asd_ha->hw_prof.phy_desc[i].max_sata_lrate,
931 asd_ha->hw_prof.phy_desc[i].min_sata_lrate,
932 asd_ha->hw_prof.phy_desc[i].flags);
940 * @asd_ha: pointer to the host adapter structure
943 static int asd_process_ctrl_a_user(struct asd_ha_struct *asd_ha,
961 asd_ha->hw_prof.sas_addr, SAS_ADDR_SIZE);
981 err = asd_read_flash_seg(asd_ha, (void *)el, offs, size);
994 err = asd_process_ctrla_phy_settings(asd_ha, ps);
1007 * @asd_ha: pointer to the host adapter structure
1009 int asd_read_flash(struct asd_ha_struct *asd_ha)
1014 err = asd_flash_getid(asd_ha);
1023 if (!asd_find_flash_dir(asd_ha, flash_dir)) {
1034 err = asd_process_ms(asd_ha, flash_dir);
1040 err = asd_process_ctrl_a_user(asd_ha, flash_dir);
1053 * @asd_ha: pointer to the host adapter structure
1058 int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
1066 reg = asd_ha->hw_prof.flash.bar;
1073 flash_char = asd_read_reg_byte(asd_ha, reg + nv_offset + i);
1084 * @asd_ha: pointer to the host adapter structure
1089 int asd_write_flash_seg(struct asd_ha_struct *asd_ha,
1096 reg = asd_ha->hw_prof.flash.bar;
1099 err = asd_check_flash_type(asd_ha);
1106 err = asd_erase_nv_sector(asd_ha, nv_offset, bytes_to_write);
1113 err = asd_reset_flash(asd_ha);
1122 switch (asd_ha->hw_prof.flash.method) {
1125 asd_write_reg_byte(asd_ha,
1127 asd_write_reg_byte(asd_ha,
1129 asd_write_reg_byte(asd_ha,
1131 asd_write_reg_byte(asd_ha,
1138 asd_write_reg_byte(asd_ha,
1140 asd_write_reg_byte(asd_ha,
1142 asd_write_reg_byte(asd_ha,
1144 asd_write_reg_byte(asd_ha,
1152 if (asd_chk_write_status(asd_ha,
1160 err = asd_reset_flash(asd_ha);
1168 int asd_chk_write_status(struct asd_ha_struct *asd_ha,
1180 reg = asd_ha->hw_prof.flash.bar;
1183 nv_data1 = asd_read_reg_byte(asd_ha, reg);
1184 nv_data2 = asd_read_reg_byte(asd_ha, reg);
1193 nv_data1 = asd_read_reg_byte(asd_ha,
1195 nv_data2 = asd_read_reg_byte(asd_ha,
1227 * @asd_ha: pointer to the host adapter structure
1231 int asd_erase_nv_sector(struct asd_ha_struct *asd_ha, u32 flash_addr, u32 size)
1236 reg = asd_ha->hw_prof.flash.bar;
1246 switch (asd_ha->hw_prof.flash.method) {
1248 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0xAA);
1249 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x55);
1250 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0x80);
1251 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0xAA);
1252 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x55);
1253 asd_write_reg_byte(asd_ha, (reg + sector_addr), 0x30);
1256 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1257 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1258 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x80);
1259 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1260 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1261 asd_write_reg_byte(asd_ha, (reg + sector_addr), 0x30);
1267 if (asd_chk_write_status(asd_ha, sector_addr, 1) != 0)
1276 int asd_check_flash_type(struct asd_ha_struct *asd_ha)
1286 reg = asd_ha->hw_prof.flash.bar;
1289 err = asd_reset_flash(asd_ha);
1295 asd_ha->hw_prof.flash.method = FLASH_METHOD_UNKNOWN;
1296 asd_ha->hw_prof.flash.manuf = FLASH_MANUF_ID_UNKNOWN;
1297 asd_ha->hw_prof.flash.dev_id = FLASH_DEV_ID_UNKNOWN;
1303 inc = asd_ha->hw_prof.flash.wide ? 2 : 1;
1304 asd_write_reg_byte(asd_ha, reg + 0xAAA, 0xAA);
1305 asd_write_reg_byte(asd_ha, reg + 0x555, 0x55);
1306 asd_write_reg_byte(asd_ha, reg + 0xAAA, 0x90);
1307 manuf_id = asd_read_reg_byte(asd_ha, reg);
1308 dev_id = asd_read_reg_byte(asd_ha, reg + inc);
1309 sec_prot = asd_read_reg_byte(asd_ha, reg + inc + inc);
1311 err = asd_reset_flash(asd_ha);
1318 err = asd_reset_flash(asd_ha);
1328 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1338 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1348 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1355 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1361 if (asd_ha->hw_prof.flash.method == FLASH_METHOD_UNKNOWN) {
1362 err = asd_reset_flash(asd_ha);
1369 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1370 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1371 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x90);
1372 manuf_id = asd_read_reg_byte(asd_ha, reg);
1373 dev_id = asd_read_reg_byte(asd_ha, reg + inc);
1374 sec_prot = asd_read_reg_byte(asd_ha, reg + inc + inc);
1379 err = asd_reset_flash(asd_ha);
1389 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1398 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1407 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1414 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1421 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1430 if (asd_ha->hw_prof.flash.method == FLASH_METHOD_UNKNOWN)
1433 asd_ha->hw_prof.flash.manuf = manuf_id;
1434 asd_ha->hw_prof.flash.dev_id = dev_id;
1435 asd_ha->hw_prof.flash.sec_prot = sec_prot;