1#include "driver.h" 2 3sb16_dev_t device; 4 5const char* devs[2] = { 6 NULL, NULL 7}; 8 9const char** publish_devices(void); /* Just to silence compiler */ 10 11static status_t 12extract_driver_settings(void* settings, sb16_dev_t* sb16) 13{ 14 const char* port; 15 const char* irq; 16 const char* dma8; 17 const char* dma16; 18 const char* midiport; 19 status_t rc; 20 21 if ((port=get_driver_parameter(settings, "port", "220", NULL)) != NULL && 22 (irq=get_driver_parameter(settings, "irq", "5", NULL)) != NULL && 23 (dma8=get_driver_parameter(settings, "dma8", "1", NULL)) != NULL && 24 (dma16=get_driver_parameter(settings, "dma16", "5", NULL)) != NULL && 25 (midiport=get_driver_parameter(settings, "midiport", "330", NULL)) != NULL) { 26 sb16->port = strtol(port, NULL, 16); 27 sb16->irq = strtol(irq, NULL, 16); 28 sb16->dma8 = strtol(dma8, NULL, 16); 29 sb16->dma16 = strtol(dma16, NULL, 16); 30 sb16->midiport = strtol(midiport, NULL, 16); 31 32 rc = B_OK; 33 } else { 34 rc = B_BAD_VALUE; 35 } 36 37 return rc; 38} 39 40//#pragma mark -- 41 42int32 api_version = B_CUR_DRIVER_API_VERSION; 43 44status_t 45init_hardware(void) 46{ 47 return B_OK; 48} 49 50status_t 51init_driver (void) 52{ 53 void* settings = load_driver_settings("sb16"); 54 status_t rc; 55 56 if (settings != NULL) { 57 rc = extract_driver_settings(settings, &device); 58 if (rc == B_OK) { 59 devs[0] = DEVFS_PATH "/sb16/0"; 60 dprintf("%s: publishing %s\n", __func__, devs[0]); 61 } 62 } else 63 rc = ENODEV; 64 65 return rc; 66} 67 68void 69uninit_driver (void) 70{ 71} 72 73const char** 74publish_devices(void) 75{ 76 return devs; 77} 78 79device_hooks* 80find_device(const char* name) 81{ 82 return &driver_hooks; 83} 84