the cookie is now allocated by the framework
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7109 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "lala/lala.h"
|
||||
#include "ichaudio.h"
|
||||
|
||||
status_t ichaudio_attach(drv_t *drv, void **cookie);
|
||||
status_t ichaudio_attach(drv_t *drv, void *cookie);
|
||||
status_t ichaudio_powerctl(drv_t *drv, void *cookie);
|
||||
status_t ichaudio_detach(drv_t *drv, void *cookie);
|
||||
|
||||
@@ -30,6 +30,7 @@ id_table_t ichaudio_id_table[] = {
|
||||
driver_info_t driver_info = {
|
||||
ichaudio_id_table,
|
||||
"audio/lala/ichaudio",
|
||||
sizeof(ichaudio_cookie),
|
||||
ichaudio_attach,
|
||||
ichaudio_detach,
|
||||
ichaudio_powerctl,
|
||||
@@ -37,11 +38,9 @@ driver_info_t driver_info = {
|
||||
|
||||
|
||||
status_t
|
||||
ichaudio_attach(drv_t *drv, void **_cookie)
|
||||
ichaudio_attach(drv_t *drv, void *cookie)
|
||||
{
|
||||
ichaudio_cookie *cookie = (ichaudio_cookie *) malloc(sizeof(ichaudio_cookie));
|
||||
if (!cookie) return B_ERROR;
|
||||
*_cookie = cookie;
|
||||
ichaudio_cookie *cookie = (ichaudio_cookie *)_cookie;
|
||||
|
||||
dprintf("ichaudio_attach\n");
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@ init_driver(void)
|
||||
drv_count = 0;
|
||||
|
||||
for (pciindex = 0; B_OK == pcimodule->get_nth_pci_info(pciindex, pciinfo); pciindex++) {
|
||||
dprintf("Checking PCI device, vendor 0x%04x, id 0x%04x, bus 0x%02x, dev 0x%02x, func 0x%02x, rev 0x%02x, api 0x%02x, sub 0x%02x, base 0x%02x\n",
|
||||
pciinfo->vendor_id, pciinfo->device_id, pciinfo->bus, pciinfo->device, pciinfo->function,
|
||||
pciinfo->revision, pciinfo->class_api, pciinfo->class_sub, pciinfo->class_base);
|
||||
// dprintf("Checking PCI device, vendor 0x%04x, id 0x%04x, bus 0x%02x, dev 0x%02x, func 0x%02x, rev 0x%02x, api 0x%02x, sub 0x%02x, base 0x%02x\n",
|
||||
// pciinfo->vendor_id, pciinfo->device_id, pciinfo->bus, pciinfo->device, pciinfo->function,
|
||||
// pciinfo->revision, pciinfo->class_api, pciinfo->class_sub, pciinfo->class_base);
|
||||
|
||||
for (devindex = 0; driver_info.table[devindex].vendor != 0; devindex++) {
|
||||
if (driver_info.table[devindex].vendor != -1 && driver_info.table[devindex].vendor != pciinfo->vendor_id)
|
||||
@@ -84,8 +84,8 @@ init_driver(void)
|
||||
drv_data[drv_count]->name = driver_info.table[devindex].name;
|
||||
drv_data[drv_count]->flags = driver_info.table[devindex].flags;
|
||||
drv_data[drv_count]->open_count = 0;
|
||||
drv_data[drv_count]->cookie = 0;
|
||||
|
||||
drv_data[drv_count]->cookie = malloc(driver_info.cookie_size);
|
||||
|
||||
drv_count++;
|
||||
break;
|
||||
}
|
||||
@@ -106,6 +106,7 @@ uninit_driver(void)
|
||||
|
||||
for (i = 0; i < drv_count; i++) {
|
||||
free(drv_path[i]);
|
||||
free(drv_data[i]->cookie);
|
||||
free(drv_data[i]);
|
||||
}
|
||||
delete_sem(drv_sem);
|
||||
@@ -130,7 +131,8 @@ ich_open(const char *name, uint32 flags, void** cookie)
|
||||
*cookie = (void *) index;
|
||||
|
||||
if (drv_data[index]->open_count == 0) {
|
||||
res = driver_info.attach(drv_data[index], &drv_data[index]->cookie);
|
||||
memset(drv_data[index]->cookie, 0, driver_info.cookie_size);
|
||||
res = driver_info.attach(drv_data[index], drv_data[index]->cookie);
|
||||
drv_data[index]->open_count = (res == B_OK) ? 1 : 0;
|
||||
} else {
|
||||
res = B_OK;
|
||||
|
||||
@@ -35,7 +35,7 @@ typedef struct {
|
||||
uint32 flags;
|
||||
} id_table_t;
|
||||
|
||||
typedef status_t (*drv_attach) (drv_t *drv, void **cookie);
|
||||
typedef status_t (*drv_attach) (drv_t *drv, void *cookie);
|
||||
typedef status_t (*drv_powerctl) (drv_t *drv, void *cookie);
|
||||
typedef status_t (*drv_detach) (drv_t *drv, void *cookie);
|
||||
|
||||
@@ -43,6 +43,7 @@ typedef struct
|
||||
{
|
||||
id_table_t * table;
|
||||
const char * basename;
|
||||
size_t cookie_size;
|
||||
drv_attach attach;
|
||||
drv_detach detach;
|
||||
drv_powerctl powerctl;
|
||||
|
||||
Reference in New Issue
Block a user