static void proc_read_hw_info(struct snd_info_entry *entry, struct snd_info_buffer *buffer) { struct snd_bebob *bebob = entry->private_data; struct hw_info *info; info = kzalloc(sizeof(struct hw_info), GFP_KERNEL); if (info == NULL) return; if (snd_bebob_read_block(bebob->unit, 0, info, sizeof(struct hw_info)) < 0) goto end; snd_iprintf(buffer, "Manufacturer:\t%.8s\n", (char *)&info->manufacturer); snd_iprintf(buffer, "Protocol Ver:\t%d\n", info->protocol_ver); snd_iprintf(buffer, "Build Ver:\t%d\n", info->bld_ver); snd_iprintf(buffer, "GUID:\t\t0x%.8X%.8X\n", info->guid[0], info->guid[1]); snd_iprintf(buffer, "Model ID:\t0x%02X\n", info->model_id); snd_iprintf(buffer, "Model Rev:\t%d\n", info->model_rev); snd_iprintf(buffer, "Firmware Date:\t%.8s\n", (char *)&info->fw_date); snd_iprintf(buffer, "Firmware Time:\t%.8s\n", (char *)&info->fw_time); snd_iprintf(buffer, "Firmware ID:\t0x%X\n", info->fw_id); snd_iprintf(buffer, "Firmware Ver:\t%d\n", info->fw_ver); snd_iprintf(buffer, "Base Addr:\t0x%X\n", info->base_addr); snd_iprintf(buffer, "Max Size:\t%d\n", info->max_size); snd_iprintf(buffer, "Loader Date:\t%.8s\n", (char *)&info->bld_date); snd_iprintf(buffer, "Loader Time:\t%.8s\n", (char *)&info->bld_time); end: kfree(info); }
static int name_device(struct snd_bebob *bebob) { struct fw_device *fw_dev = fw_parent_device(bebob->unit); char vendor[24] = {0}; char model[32] = {0}; u32 hw_id; u32 data[2] = {0}; u32 revision; u32 version; int err; /* get vendor name from root directory */ err = fw_csr_string(fw_dev->config_rom + 5, CSR_VENDOR, vendor, sizeof(vendor)); if (err < 0) goto end; /* get model name from unit directory */ err = fw_csr_string(bebob->unit->directory, CSR_MODEL, model, sizeof(model)); if (err < 0) goto end; /* get hardware id */ err = snd_bebob_read_quad(bebob->unit, INFO_OFFSET_HW_MODEL_ID, &hw_id); if (err < 0) goto end; /* get hardware revision */ err = snd_bebob_read_quad(bebob->unit, INFO_OFFSET_HW_MODEL_REVISION, &revision); if (err < 0) goto end; /* get GUID */ err = snd_bebob_read_block(bebob->unit, INFO_OFFSET_GUID, data, sizeof(data)); if (err < 0) goto end; err = snd_bebob_read_quad(bebob->unit, INFO_OFFSET_BEBOB_VERSION, &version); if (err < 0) goto end; bebob->version = version; strcpy(bebob->card->driver, "BeBoB"); strcpy(bebob->card->shortname, model); strcpy(bebob->card->mixername, model); snprintf(bebob->card->longname, sizeof(bebob->card->longname), "%s %s (id:%d, rev:%d), GUID %08x%08x at %s, S%d", vendor, model, hw_id, revision, data[0], data[1], dev_name(&bebob->unit->device), 100 << fw_dev->max_speed); end: return err; }
static int name_device(struct snd_bebob *bebob, int vendor_id) { char vendor[24] = {}; char model[24] = {}; u32 id; u32 data[2] = {}; u32 revision; int err = 0; /* get vendor name */ if ((vendor_id == VENDOR_MAUDIO1) || (vendor_id == VENDOR_MAUDIO2)) strcpy(vendor, "M-Audio"); else if (vendor_id == VENDOR_YAMAHA) strcpy(vendor, "YAMAHA"); else strcpy(vendor, "Unknown"); /* get model name */ err = fw_csr_string(bebob->unit->directory, CSR_MODEL, model, sizeof(model)); if (err < 0) goto end; /* get hardware id */ err = snd_bebob_read_quad(bebob, INFO_OFFSET_HW_MODEL_ID, &id, sizeof(id)); if (err < 0) goto end; /* get hardware revision */ err = snd_bebob_read_quad(bebob, INFO_OFFSET_HW_MODEL_REVISION, &revision, sizeof(revision)); if (err < 0) goto end; /* get GUID */ err = snd_bebob_read_block(bebob, INFO_OFFSET_GUID, data, sizeof(data)); if (err < 0) goto end; strcpy(bebob->card->driver, "BeBoB"); strcpy(bebob->card->shortname, model); snprintf(bebob->card->longname, sizeof(bebob->card->longname), "%s %s (id:%d, rev:%d), GUID %08x%08x at %s, S%d", vendor, model, id, revision, data[0], data[1], dev_name(&bebob->unit->device), 100 << bebob->device->max_speed); end: return err; }