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_card(struct snd_oxfw *oxfw) { struct fw_device *fw_dev = fw_parent_device(oxfw->unit); const struct compat_info *info; char vendor[24]; char model[32]; const char *d, *v, *m; u32 firmware; 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(oxfw->unit->directory, CSR_MODEL, model, sizeof(model)); if (err < 0) goto end; err = snd_fw_transaction(oxfw->unit, TCODE_READ_QUADLET_REQUEST, OXFORD_FIRMWARE_ID_ADDRESS, &firmware, 4, 0); if (err < 0) goto end; be32_to_cpus(&firmware); /* to apply card definitions */ if (oxfw->entry->vendor_id == VENDOR_GRIFFIN || oxfw->entry->vendor_id == VENDOR_LACIE) { info = (const struct compat_info *)oxfw->entry->driver_data; d = info->driver_name; v = info->vendor_name; m = info->model_name; } else { d = "OXFW"; v = vendor; m = model; } strcpy(oxfw->card->driver, d); strcpy(oxfw->card->mixername, m); strcpy(oxfw->card->shortname, m); snprintf(oxfw->card->longname, sizeof(oxfw->card->longname), "%s %s (OXFW%x %04x), GUID %08x%08x at %s, S%d", v, m, firmware >> 20, firmware & 0xffff, fw_dev->config_rom[3], fw_dev->config_rom[4], dev_name(&oxfw->unit->device), 100 << fw_dev->max_speed); end: return err; }
static bool detect_loud_models(struct fw_unit *unit) { const char *const models[] = { "Onyxi", "Onyx-i", "d.Pro", "Mackie Onyx Satellite", "Tapco LINK.firewire 4x6", "U.420"}; char model[32]; unsigned int i; int err; err = fw_csr_string(unit->directory, CSR_MODEL, model, sizeof(model)); if (err < 0) return false; for (i = 0; i < ARRAY_SIZE(models); i++) { if (strcmp(models[i], model) == 0) break; } return (i < ARRAY_SIZE(models)); }
static bool check_audiophile_booted(struct fw_unit *unit) { char name[24] = {0}; if (fw_csr_string(unit->directory, CSR_MODEL, name, sizeof(name)) < 0) return false; return strncmp(name, "FW Audiophile Bootloader", 15) != 0; }
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; }
static const struct snd_bebob_spec * get_saffire_spec(struct fw_unit *unit) { char name[24] = {0}; if (fw_csr_string(unit->directory, CSR_MODEL, name, sizeof(name)) < 0) return NULL; if (strcmp(name, "SaffireLE") == 0) return &saffire_le_spec; else return &saffire_spec; }
static bool check_audiophile_booted(struct snd_bebob *bebob) { char name[24] = {0}; if (fw_csr_string(bebob->unit->directory, CSR_MODEL, name, sizeof(name)) < 0) return false; if (strncmp(name, "FW Audiophile Bootloader", 15) == 0) return false; else return true; }
static int name_card(struct snd_dg00x *dg00x) { struct fw_device *fw_dev = fw_parent_device(dg00x->unit); char name[32] = {0}; char *model; int err; err = fw_csr_string(dg00x->unit->directory, CSR_MODEL, name, sizeof(name)); if (err < 0) return err; model = skip_spaces(name); strcpy(dg00x->card->driver, "Digi00x"); strcpy(dg00x->card->shortname, model); strcpy(dg00x->card->mixername, model); snprintf(dg00x->card->longname, sizeof(dg00x->card->longname), "Digidesign %s, GUID %08x%08x at %s, S%d", model, fw_dev->config_rom[3], fw_dev->config_rom[4], dev_name(&dg00x->unit->device), 100 << fw_dev->max_speed); return 0; }