Lines Matching defs:asd_ha
109 * @asd_ha: pointer to the host adapter structure
116 static int asd_read_ocm_seg(struct asd_ha_struct *asd_ha, void *buffer,
120 if (unlikely(asd_ha->iospace))
121 asd_read_reg_string(asd_ha, buffer, offs+OCM_BASE_ADDR, size);
124 *p = asd_read_ocm_byte(asd_ha, offs);
129 static int asd_read_ocm_dir(struct asd_ha_struct *asd_ha,
132 int err = asd_read_ocm_seg(asd_ha, dir, offs, sizeof(*dir));
154 * @asd_ha: pointer to the host adapter structure
161 static void asd_write_ocm_seg(struct asd_ha_struct *asd_ha, void *buffer,
165 if (unlikely(asd_ha->iospace))
166 asd_write_reg_string(asd_ha, buffer, offs+OCM_BASE_ADDR, size);
169 asd_write_ocm_byte(asd_ha, offs, *p);
197 static int asd_get_bios_chim(struct asd_ha_struct *asd_ha,
215 err = asd_read_ocm_seg(asd_ha, (void *)bc_struct, offs,
236 asd_ha->hw_prof.bios.present = 1;
237 asd_ha->hw_prof.bios.maj = bc_struct->bios_major;
238 asd_ha->hw_prof.bios.min = bc_struct->bios_minor;
239 asd_ha->hw_prof.bios.bld = le32_to_cpu(bc_struct->bios_build);
241 asd_ha->hw_prof.bios.maj,
242 asd_ha->hw_prof.bios.min,
243 asd_ha->hw_prof.bios.bld);
245 asd_ha->hw_prof.ue.num = le16_to_cpu(bc_struct->ue_num);
246 asd_ha->hw_prof.ue.size= le16_to_cpu(bc_struct->ue_size);
247 ASD_DPRINTK("ue num:%d, ue size:%d\n", asd_ha->hw_prof.ue.num,
248 asd_ha->hw_prof.ue.size);
249 size = asd_ha->hw_prof.ue.num * asd_ha->hw_prof.ue.size;
252 asd_ha->hw_prof.ue.area = kmalloc(size, GFP_KERNEL);
253 if (!asd_ha->hw_prof.ue.area)
255 err = asd_read_ocm_seg(asd_ha, (void *)asd_ha->hw_prof.ue.area,
258 kfree(asd_ha->hw_prof.ue.area);
259 asd_ha->hw_prof.ue.area = NULL;
260 asd_ha->hw_prof.ue.num = 0;
261 asd_ha->hw_prof.ue.size = 0;
272 asd_hwi_initialize_ocm_dir (struct asd_ha_struct *asd_ha)
278 asd_write_ocm_dword(asd_ha, i, 0);
281 asd_write_ocm_seg(asd_ha, &OCMDirInit, 0,
286 asd_write_ocm_seg(asd_ha, &OCMDirEntriesInit[i],
294 asd_hwi_check_ocm_access (struct asd_ha_struct *asd_ha)
296 struct pci_dev *pcidev = asd_ha->pcidev;
302 reg = asd_read_reg_dword(asd_ha, EXSICNFGR);
325 asd_hwi_initialize_ocm_dir(asd_ha);
334 * @asd_ha: pointer to the host adapter structure
336 int asd_read_ocm(struct asd_ha_struct *asd_ha)
341 if (asd_hwi_check_ocm_access(asd_ha))
350 err = asd_read_ocm_dir(asd_ha, dir, 0);
354 err = asd_get_bios_chim(asd_ha, dir);
548 static int asd_poll_flash(struct asd_ha_struct *asd_ha)
554 d = asd_read_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar);
555 d ^= asd_read_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar);
563 static int asd_reset_flash(struct asd_ha_struct *asd_ha)
567 err = asd_poll_flash(asd_ha);
570 asd_write_reg_byte(asd_ha, asd_ha->hw_prof.flash.bar, FLASH_RESET);
571 err = asd_poll_flash(asd_ha);
576 static int asd_read_flash_seg(struct asd_ha_struct *asd_ha,
579 asd_read_reg_string(asd_ha, buffer, asd_ha->hw_prof.flash.bar+offs,
586 * @asd_ha: pointer to the host adapter structure
592 static int asd_find_flash_dir(struct asd_ha_struct *asd_ha,
597 asd_read_flash_seg(asd_ha, flash_dir, v,
601 asd_ha->hw_prof.flash.dir_offs = v;
602 asd_read_flash_seg(asd_ha, flash_dir, v,
610 static int asd_flash_getid(struct asd_ha_struct *asd_ha)
615 reg = asd_read_reg_dword(asd_ha, EXSICNFGR);
617 if (pci_read_config_dword(asd_ha->pcidev, PCI_CONF_FLSH_BAR,
618 &asd_ha->hw_prof.flash.bar)) {
620 pci_name(asd_ha->pcidev));
623 asd_ha->hw_prof.flash.present = 1;
624 asd_ha->hw_prof.flash.wide = reg & FLASHW ? 1 : 0;
625 err = asd_reset_flash(asd_ha);
688 static int asd_ms_get_sas_addr(struct asd_ha_struct *asd_ha,
691 memcpy(asd_ha->hw_prof.sas_addr, ms->sas_addr, SAS_ADDR_SIZE);
695 static int asd_ms_get_pcba_sn(struct asd_ha_struct *asd_ha,
698 memcpy(asd_ha->hw_prof.pcba_sn, ms->pcba_sn, ASD_PCBA_SN_SIZE);
699 asd_ha->hw_prof.pcba_sn[ASD_PCBA_SN_SIZE] = '\0';
734 * @asd_ha: pointer to the host adapter structure
752 static int asd_ms_get_phy_params(struct asd_ha_struct *asd_ha,
791 asd_ha->hw_prof.enabled_phys = 0;
800 asd_ha->hw_prof.enabled_phys &= ~(1 << i);
805 asd_ha->hw_prof.enabled_phys |= (1 << i);
809 asd_ha->hw_prof.phy_desc[i].phy_control_0 = pd->phy_control_0;
810 asd_ha->hw_prof.phy_desc[i].phy_control_1 = pd->phy_control_1;
811 asd_ha->hw_prof.phy_desc[i].phy_control_2 = pd->phy_control_2;
812 asd_ha->hw_prof.phy_desc[i].phy_control_3 = pd->phy_control_3;
814 asd_ha->hw_prof.max_phys = rep_phys + en_phys;
815 asd_ha->hw_prof.num_phys = en_phys;
817 asd_ha->hw_prof.max_phys, asd_ha->hw_prof.num_phys);
818 ASD_DPRINTK("ms: enabled_phys:0x%x\n", asd_ha->hw_prof.enabled_phys);
822 static int asd_ms_get_connector_map(struct asd_ha_struct *asd_ha,
847 * @asd_ha: pointer to the host adapter structure
850 static int asd_process_ms(struct asd_ha_struct *asd_ha,
873 err = asd_read_flash_seg(asd_ha, (void *)manuf_sec, offs, size);
886 err = asd_ms_get_sas_addr(asd_ha, manuf_sec);
892 SAS_ADDR(asd_ha->hw_prof.sas_addr));
894 err = asd_ms_get_pcba_sn(asd_ha, manuf_sec);
899 ASD_DPRINTK("manuf sect PCBA SN %s\n", asd_ha->hw_prof.pcba_sn);
901 err = asd_ms_get_phy_params(asd_ha, manuf_sec);
907 err = asd_ms_get_connector_map(asd_ha, manuf_sec);
919 static int asd_process_ctrla_phy_settings(struct asd_ha_struct *asd_ha,
926 if (!PHY_ENABLED(asd_ha, i))
929 asd_ha->hw_prof.enabled_phys &= ~(1 << i);
933 memcpy(asd_ha->hw_prof.phy_desc[i].sas_addr, pe->sas_addr,
935 asd_ha->hw_prof.phy_desc[i].max_sas_lrate =
937 asd_ha->hw_prof.phy_desc[i].min_sas_lrate =
939 asd_ha->hw_prof.phy_desc[i].max_sata_lrate =
941 asd_ha->hw_prof.phy_desc[i].min_sata_lrate =
943 asd_ha->hw_prof.phy_desc[i].flags = pe->flags;
947 SAS_ADDR(asd_ha->hw_prof.phy_desc[i].sas_addr),
948 asd_ha->hw_prof.phy_desc[i].max_sas_lrate,
949 asd_ha->hw_prof.phy_desc[i].min_sas_lrate,
950 asd_ha->hw_prof.phy_desc[i].max_sata_lrate,
951 asd_ha->hw_prof.phy_desc[i].min_sata_lrate,
952 asd_ha->hw_prof.phy_desc[i].flags);
960 * @asd_ha: pointer to the host adapter structure
963 static int asd_process_ctrl_a_user(struct asd_ha_struct *asd_ha,
981 asd_ha->hw_prof.sas_addr, SAS_ADDR_SIZE);
1002 err = asd_read_flash_seg(asd_ha, (void *)el, offs, size);
1015 err = asd_process_ctrla_phy_settings(asd_ha, ps);
1028 * @asd_ha: pointer to the host adapter structure
1030 int asd_read_flash(struct asd_ha_struct *asd_ha)
1035 err = asd_flash_getid(asd_ha);
1044 if (!asd_find_flash_dir(asd_ha, flash_dir)) {
1055 err = asd_process_ms(asd_ha, flash_dir);
1061 err = asd_process_ctrl_a_user(asd_ha, flash_dir);
1074 * @asd_ha: pointer to the host adapter structure
1079 int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
1087 reg = asd_ha->hw_prof.flash.bar;
1094 flash_char = asd_read_reg_byte(asd_ha, reg + nv_offset + i);
1105 * @asd_ha: pointer to the host adapter structure
1110 int asd_write_flash_seg(struct asd_ha_struct *asd_ha,
1117 reg = asd_ha->hw_prof.flash.bar;
1120 err = asd_check_flash_type(asd_ha);
1127 err = asd_erase_nv_sector(asd_ha, nv_offset, bytes_to_write);
1134 err = asd_reset_flash(asd_ha);
1143 switch (asd_ha->hw_prof.flash.method) {
1146 asd_write_reg_byte(asd_ha,
1148 asd_write_reg_byte(asd_ha,
1150 asd_write_reg_byte(asd_ha,
1152 asd_write_reg_byte(asd_ha,
1159 asd_write_reg_byte(asd_ha,
1161 asd_write_reg_byte(asd_ha,
1163 asd_write_reg_byte(asd_ha,
1165 asd_write_reg_byte(asd_ha,
1173 if (asd_chk_write_status(asd_ha,
1181 err = asd_reset_flash(asd_ha);
1189 int asd_chk_write_status(struct asd_ha_struct *asd_ha,
1201 reg = asd_ha->hw_prof.flash.bar;
1204 nv_data1 = asd_read_reg_byte(asd_ha, reg);
1205 nv_data2 = asd_read_reg_byte(asd_ha, reg);
1214 nv_data1 = asd_read_reg_byte(asd_ha,
1216 nv_data2 = asd_read_reg_byte(asd_ha,
1248 * @asd_ha: pointer to the host adapter structure
1252 int asd_erase_nv_sector(struct asd_ha_struct *asd_ha, u32 flash_addr, u32 size)
1257 reg = asd_ha->hw_prof.flash.bar;
1267 switch (asd_ha->hw_prof.flash.method) {
1269 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0xAA);
1270 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x55);
1271 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0x80);
1272 asd_write_reg_byte(asd_ha, (reg + 0xAAA), 0xAA);
1273 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x55);
1274 asd_write_reg_byte(asd_ha, (reg + sector_addr), 0x30);
1277 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1278 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1279 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x80);
1280 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1281 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1282 asd_write_reg_byte(asd_ha, (reg + sector_addr), 0x30);
1288 if (asd_chk_write_status(asd_ha, sector_addr, 1) != 0)
1297 int asd_check_flash_type(struct asd_ha_struct *asd_ha)
1307 reg = asd_ha->hw_prof.flash.bar;
1310 err = asd_reset_flash(asd_ha);
1316 asd_ha->hw_prof.flash.method = FLASH_METHOD_UNKNOWN;
1317 asd_ha->hw_prof.flash.manuf = FLASH_MANUF_ID_UNKNOWN;
1318 asd_ha->hw_prof.flash.dev_id = FLASH_DEV_ID_UNKNOWN;
1324 inc = asd_ha->hw_prof.flash.wide ? 2 : 1;
1325 asd_write_reg_byte(asd_ha, reg + 0xAAA, 0xAA);
1326 asd_write_reg_byte(asd_ha, reg + 0x555, 0x55);
1327 asd_write_reg_byte(asd_ha, reg + 0xAAA, 0x90);
1328 manuf_id = asd_read_reg_byte(asd_ha, reg);
1329 dev_id = asd_read_reg_byte(asd_ha, reg + inc);
1330 sec_prot = asd_read_reg_byte(asd_ha, reg + inc + inc);
1332 err = asd_reset_flash(asd_ha);
1339 err = asd_reset_flash(asd_ha);
1349 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1359 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1369 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1376 asd_ha->hw_prof.flash.method = FLASH_METHOD_A;
1382 if (asd_ha->hw_prof.flash.method == FLASH_METHOD_UNKNOWN) {
1383 err = asd_reset_flash(asd_ha);
1390 asd_write_reg_byte(asd_ha, (reg + 0x555), 0xAA);
1391 asd_write_reg_byte(asd_ha, (reg + 0x2AA), 0x55);
1392 asd_write_reg_byte(asd_ha, (reg + 0x555), 0x90);
1393 manuf_id = asd_read_reg_byte(asd_ha, reg);
1394 dev_id = asd_read_reg_byte(asd_ha, reg + inc);
1395 sec_prot = asd_read_reg_byte(asd_ha, reg + inc + inc);
1400 err = asd_reset_flash(asd_ha);
1410 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1419 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1428 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1435 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1442 asd_ha->hw_prof.flash.method = FLASH_METHOD_B;
1451 if (asd_ha->hw_prof.flash.method == FLASH_METHOD_UNKNOWN)
1454 asd_ha->hw_prof.flash.manuf = manuf_id;
1455 asd_ha->hw_prof.flash.dev_id = dev_id;
1456 asd_ha->hw_prof.flash.sec_prot = sec_prot;