Ticket #6164: 0003-Fix-OpenPIC.patch
File 0003-Fix-OpenPIC.patch, 4.3 KB (added by , 14 years ago) |
---|
-
src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp
From d74a4855e6b0275f5f9ad96a4f76091cefc7fb79 Mon Sep 17 00:00:00 2001 From: Andreas Faerber <andreas.faerber@web.de> Date: Sun, 13 Jun 2010 04:36:52 +0200 Subject: [PATCH 3/3] Fix OpenPIC --- .../interrupt_controllers/openpic/openpic.cpp | 89 +++++++------------ 1 files changed, 33 insertions(+), 56 deletions(-) diff --git a/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp b/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp index a25b3de..0450732 100644
a b openpic_supports_device(device_node *parent) 312 312 static status_t 313 313 openpic_register_device(device_node *parent) 314 314 { 315 #if 0 //XXX: what do I do ? 316 // get interface to PCI device 317 pci_device_module_info *pci; 318 pci_device *device; 319 driver_module_info *driver; 320 void *cookie; 321 status_t error; 322 error = sDeviceManager->get_driver(parent, &driver, &cookie); 323 if (error < B_OK) 324 return error; 325 error = driver->init_driver(parent, cookie); 326 // (driver_module_info**)&pci, (void**)&device); // wtf? 327 if (error != B_OK) 328 return error; 329 330 sDeviceManager->uninit_driver(parent); 331 #endif 332 device_node *newNode; 333 device_attr attrs[] = { 334 // info about ourself 335 //{ B_DRIVER_MODULE, B_STRING_TYPE, { string: OPENPIC_MODULE_NAME }}, 336 //XXX: that's inconsistent with the header! 337 //{ B_DEVICE_TYPE, B_STRING_TYPE, 338 // { string: B_INTERRUPT_CONTROLLER_DRIVER_TYPE }}, 339 340 {} 341 }; 342 343 // HACK: to get it compiled, I will break anything. 344 return sDeviceManager->register_node(parent, NULL, attrs, NULL, &newNode); 315 device_node *newNode; 316 device_attr attrs[] = { 317 // info about ourself 318 { B_DEVICE_TYPE, B_UINT16_TYPE, { ui16: PCI_base_peripheral }}, 319 { B_DEVICE_SUB_TYPE, B_UINT16_TYPE, { ui16: PCI_pic }}, 320 // TODO How do we identify ourselves as OpenPIC? 321 { B_DEVICE_INTERFACE, B_UINT16_TYPE, { ui16: PCI_pic_8259 }}, 322 {} 323 }; 324 io_resource resources[] = { 325 // TODO Fill in whatever necessary 326 {} 327 }; 328 329 return sDeviceManager->register_node(parent, OPENPIC_MODULE_NAME, 330 attrs, resources, &newNode); 345 331 } 346 332 347 333 348 334 static status_t 349 335 openpic_init_driver(device_node *node, void **cookie) 350 336 { 351 // OK, this module is broken for now. But it compiles.352 return B_ERROR;353 337 openpic_info *info = new(nothrow) openpic_info; 354 338 if (!info) 355 339 return B_NO_MEMORY; … … openpic_init_driver(device_node *node, void **cookie) 359 343 360 344 // get interface to PCI device 361 345 void *aCookie; 362 void *anotherCookie; // possibly the same cookie.363 driver_module_info *driver;364 346 status_t status = sDeviceManager->get_driver(sDeviceManager->get_parent_node(node), 365 &driver, &aCookie);347 (driver_module_info**)&info->pci, &aCookie); 366 348 if (status != B_OK) 367 349 return status; 368 350 369 driver->init_driver(node, &anotherCookie); 370 371 /* status = sDeviceManager->init_driver( 372 sDeviceManager->get_parent(node), NULL, 373 (driver_module_info**)&info->pci, (void**)&info->device); 374 if (status != B_OK) 375 return status; */ 351 info->pci->info.init_driver(node, (void**)&info->device); 376 352 377 353 // get the pci info for the device 378 354 pci_info pciInfo; … … openpic_uninit_driver(void *cookie) 439 415 } 440 416 441 417 442 static void443 openpic_ device_removed(void *driverCookie)418 static status_t 419 openpic_register_child_devices(void *cookie) 444 420 { 445 // TODO: ...421 return B_OK; 446 422 } 447 423 448 424 449 // FIXME: I don't think this is needed... 450 /*static void 451 openpic_get_paths(const char **_bus, const char **_device) 425 static status_t 426 openpic_rescan_child_devices(void *cookie) 452 427 { 453 static const char *kBus[] = { "pci", NULL }; 454 // static const char *kDevice[] = { "drivers/dev/disk/ide", NULL }; 428 return B_OK; 429 } 430 455 431 456 *_bus = kBus; 457 // *_device = kDevice; 458 *_device = NULL; 459 }*/ 432 static void 433 openpic_device_removed(void *driverCookie) 434 { 435 // TODO: ... 436 } 460 437 461 438 462 439 // #pragma mark - interrupt_controller interface … … static interrupt_controller_module_info sControllerModuleInfo = { 530 507 openpic_register_device, 531 508 openpic_init_driver, 532 509 openpic_uninit_driver, 533 NULL, // HACK: register_child_devices534 NULL, // HACK: rescan_child_devices510 openpic_register_child_devices, 511 openpic_rescan_child_devices, 535 512 openpic_device_removed, 536 513 NULL, // suspend 537 514 NULL // resume