Changeset cffa14e6 in mainline for uspace/drv/bus/usb/ehci/res.c
- Timestamp:
- 2013-07-24T17:27:56Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- db71e2a
- Parents:
- c442f63
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ehci/res.c
rc442f63 rcffa14e6 145 145 return ENOMEM; 146 146 147 #define CHECK_RET_HANGUP_RETURN(ret, message...) \ 148 if (ret != EOK) { \ 149 usb_log_error(message); \ 150 async_hangup(parent_sess); \ 151 return ret; \ 152 } else (void)0 153 147 154 /* Read the first EEC. i.e. Legacy Support register */ 148 155 uint32_t usblegsup; 149 int r c= pci_config_space_read_32(parent_sess,156 int ret = pci_config_space_read_32(parent_sess, 150 157 eecp + USBLEGSUP_OFFSET, &usblegsup); 151 if (rc != EOK) { 152 usb_log_error("Failed to read USBLEGSUP: %s.\n", 153 str_error(rc)); 154 goto error; 155 } 156 158 CHECK_RET_HANGUP_RETURN(ret, 159 "Failed to read USBLEGSUP: %s.\n", str_error(ret)); 157 160 usb_log_debug("USBLEGSUP: %" PRIx32 ".\n", usblegsup); 158 161 … … 160 163 * byte. (OS Control semaphore)*/ 161 164 usb_log_debug("Requesting OS control.\n"); 162 r c= pci_config_space_write_8(parent_sess,165 ret = pci_config_space_write_8(parent_sess, 163 166 eecp + USBLEGSUP_OFFSET + 3, 1); 164 if (rc != EOK) { 165 usb_log_error("Failed to request OS EHCI control: %s.\n", 166 str_error(rc)); 167 goto error; 168 } 167 CHECK_RET_HANGUP_RETURN(ret, "Failed to request OS EHCI control: %s.\n", 168 str_error(ret)); 169 169 170 170 size_t wait = 0; 171 171 /* Wait for BIOS to release control. */ 172 r c= pci_config_space_read_32(172 ret = pci_config_space_read_32( 173 173 parent_sess, eecp + USBLEGSUP_OFFSET, &usblegsup); 174 if (rc != EOK) {175 usb_log_error("Failed reading PCI config space: %s.\n",176 str_error(rc));177 goto error;178 }179 180 174 while ((wait < DEFAULT_WAIT) && (usblegsup & USBLEGSUP_BIOS_CONTROL)) { 181 175 async_usleep(WAIT_STEP); 182 r c= pci_config_space_read_32(parent_sess,176 ret = pci_config_space_read_32(parent_sess, 183 177 eecp + USBLEGSUP_OFFSET, &usblegsup); 184 if (rc != EOK) {185 usb_log_error("Failed reading PCI config space: %s.\n",186 str_error(rc));187 goto error;188 }189 178 wait += WAIT_STEP; 190 179 } … … 199 188 usb_log_warning( "BIOS failed to release control after " 200 189 "%zu usecs, force it.\n", wait); 201 r c= pci_config_space_write_32(parent_sess,190 ret = pci_config_space_write_32(parent_sess, 202 191 eecp + USBLEGSUP_OFFSET, USBLEGSUP_OS_CONTROL); 203 if (rc != EOK) { 204 usb_log_error("Failed to force OS control: " 205 "%s.\n", str_error(rc)); 206 goto error; 207 } 208 192 CHECK_RET_HANGUP_RETURN(ret, "Failed to force OS control: " 193 "%s.\n", str_error(ret)); 209 194 /* 210 195 * Check capability type here, value of 01h identifies the capability … … 216 201 /* Read the second EEC Legacy Support and Control register */ 217 202 uint32_t usblegctlsts; 218 r c= pci_config_space_read_32(parent_sess,203 ret = pci_config_space_read_32(parent_sess, 219 204 eecp + USBLEGCTLSTS_OFFSET, &usblegctlsts); 220 if (rc != EOK) { 221 usb_log_error("Failed to get USBLEGCTLSTS: %s.\n", 222 str_error(rc)); 223 goto error; 224 } 225 205 CHECK_RET_HANGUP_RETURN(ret, "Failed to get USBLEGCTLSTS: %s.\n", 206 str_error(ret)); 226 207 usb_log_debug("USBLEGCTLSTS: %" PRIx32 ".\n", usblegctlsts); 227 208 /* … … 230 211 * interfering. NOTE: Three upper bits are WC 231 212 */ 232 r c= pci_config_space_write_32(parent_sess,213 ret = pci_config_space_write_32(parent_sess, 233 214 eecp + USBLEGCTLSTS_OFFSET, 0xe0000000); 234 if (rc != EOK) { 235 usb_log_error("Failed(%d) zero USBLEGCTLSTS.\n", rc); 236 goto error; 237 } 238 215 CHECK_RET_HANGUP_RETURN(ret, "Failed(%d) zero USBLEGCTLSTS.\n", ret); 239 216 udelay(10); 240 r c= pci_config_space_read_32(parent_sess,217 ret = pci_config_space_read_32(parent_sess, 241 218 eecp + USBLEGCTLSTS_OFFSET, &usblegctlsts); 242 if (rc != EOK) { 243 usb_log_error("Failed to get USBLEGCTLSTS 2: %s.\n", 244 str_error(rc)); 245 goto error; 246 } 247 219 CHECK_RET_HANGUP_RETURN(ret, "Failed to get USBLEGCTLSTS 2: %s.\n", 220 str_error(ret)); 248 221 usb_log_debug("Zeroed USBLEGCTLSTS: %" PRIx32 ".\n", 249 222 usblegctlsts); … … 251 224 252 225 /* Read again Legacy Support register */ 253 r c= pci_config_space_read_32(parent_sess,226 ret = pci_config_space_read_32(parent_sess, 254 227 eecp + USBLEGSUP_OFFSET, &usblegsup); 255 if (rc != EOK) { 256 usb_log_error("Failed to read USBLEGSUP: %s.\n", 257 str_error(rc)); 258 goto error; 259 } 260 228 CHECK_RET_HANGUP_RETURN(ret, "Failed to read USBLEGSUP: %s.\n", 229 str_error(ret)); 261 230 usb_log_debug("USBLEGSUP: %" PRIx32 ".\n", usblegsup); 262 231 async_hangup(parent_sess); 263 232 return EOK; 264 error: 265 async_hangup(parent_sess); 266 return rc; 233 #undef CHECK_RET_HANGUP_RETURN 267 234 } 268 235 … … 272 239 usb_log_debug("Disabling EHCI legacy support.\n"); 273 240 241 #define CHECK_RET_RETURN(ret, message...) \ 242 if (ret != EOK) { \ 243 usb_log_error(message); \ 244 return ret; \ 245 } else (void)0 246 274 247 /* Map EHCI registers */ 275 248 void *regs = NULL; 276 int rc = pio_enable((void*)reg_base, reg_size, ®s); 277 if (rc != EOK) { 278 usb_log_error("Failed to map registers %p: %s.\n", 279 (void *) reg_base, str_error(rc)); 280 return rc; 281 } 249 int ret = pio_enable((void*)reg_base, reg_size, ®s); 250 CHECK_RET_RETURN(ret, "Failed to map registers %p: %s.\n", 251 (void *) reg_base, str_error(ret)); 282 252 283 253 usb_log_debug2("Registers mapped at: %p.\n", regs); … … 293 263 usb_log_debug("Value of EECP: %x.\n", eecp); 294 264 295 rc = disable_extended_caps(device, eecp); 296 if (rc != EOK) { 297 usb_log_error("Failed to disable extended capabilities: %s.\n", 298 str_error(rc)); 299 return rc; 300 } 265 ret = disable_extended_caps(device, eecp); 266 CHECK_RET_RETURN(ret, "Failed to disable extended capabilities: %s.\n", 267 str_error(ret)); 268 269 #undef CHECK_RET_RETURN 301 270 302 271 /* … … 337 306 usbcmd, *usbcmd, usbsts, *usbsts, usbint, *usbint, usbconf,*usbconf); 338 307 339 return r c;308 return ret; 340 309 } 341 310
Note:
See TracChangeset
for help on using the changeset viewer.