static int hset(Aoedev *d, Frame *f, Aoehdr *h, int cmd) { int i; Devlink *l; l = pickdevlink(d); i = pickea(l); if(i == -1){ downdev(d, "resend fails; no netlink/ea"); return -1; } if(f->srb && sys->ticks - f->srb->ticksent > Srbtimeout){ eventlog("%æ: srb timeout\n", d); frameerror(d, f, Etimedout); return -1; } memmove(h->dst, l->eatab[i], Eaddrlen); memmove(h->src, l->nl->ea, sizeof h->src); hnputs(h->type, Aoetype); h->verflag = Aoever << 4; h->error = 0; hnputs(h->major, d->major); h->minor = d->minor; h->cmd = cmd; hnputl(h->tag, f->tag = newtag(d)); f->dl = l; f->nl = l->nl; f->eaidx = i; f->ticksent = sys->ticks; return f->tag; }
void info_xml_creator::output_switches(const ioport_list &portlist, const char *root_tag, int type, const char *outertag, const char *innertag) { // iterate looking for DIP switches for (ioport_port *port = portlist.first(); port != NULL; port = port->next()) for (ioport_field *field = port->first_field(); field != NULL; field = field->next()) if (field->type() == type) { astring output; astring newtag(port->tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); // output the switch name information astring normalized_field_name(xml_normalize_string(field->name())); astring normalized_newtag(xml_normalize_string(newtag)); output.catprintf("\t\t<%s name=\"%s\" tag=\"%s\" mask=\"%u\">\n", outertag, normalized_field_name.cstr(), normalized_newtag.cstr(), field->mask()); // loop over settings for (ioport_setting *setting = field->first_setting(); setting != NULL; setting = setting->next()) { output.catprintf("\t\t\t<%s name=\"%s\" value=\"%u\"%s/>\n", innertag, xml_normalize_string(setting->name()), setting->value(), setting->value() == field->defvalue() ? " default=\"yes\"" : ""); } // terminate the switch entry output.catprintf("\t\t</%s>\n", outertag); fprintf(m_output, "%s", output.cstr()); } }
static void rexmit(struct aoedev *d, struct frame *f) { struct sk_buff *skb; struct aoe_hdr *h; struct aoe_atahdr *ah; char buf[128]; u32 n; n = newtag(d); snprintf(buf, sizeof buf, "%15s e%ld.%ld oldtag=%08x@%08lx newtag=%08x\n", "retransmit", d->aoemajor, d->aoeminor, f->tag, jiffies, n); aoechr_error(buf); skb = f->skb; h = (struct aoe_hdr *) skb->mac.raw; ah = (struct aoe_atahdr *) (h+1); f->tag = n; h->tag = cpu_to_be32(n); memcpy(h->dst, d->addr, sizeof h->dst); memcpy(h->src, d->ifp->dev_addr, sizeof h->src); n = DEFAULTBCNT / 512; if (ah->scnt > n) { ah->scnt = n; if (ah->aflags & AOEAFL_WRITE) { skb_fill_page_desc(skb, 0, virt_to_page(f->bufaddr), offset_in_page(f->bufaddr), DEFAULTBCNT); skb->len = sizeof *h + sizeof *ah + DEFAULTBCNT; skb->data_len = DEFAULTBCNT; } if (++d->lostjumbo > (d->nframes << 1)) if (d->maxbcnt != DEFAULTBCNT) { printk(KERN_INFO "aoe: e%ld.%ld: too many lost jumbo on %s - using 1KB frames.\n", d->aoemajor, d->aoeminor, d->ifp->name); d->maxbcnt = DEFAULTBCNT; d->flags |= DEVFL_MAXBCNT; } } skb->dev = d->ifp; skb = skb_clone(skb, GFP_ATOMIC); if (skb == NULL) return; if (d->sendq_hd) d->sendq_tl->next = skb; else d->sendq_hd = skb; d->sendq_tl = skb; }
void info_xml_creator::output_chips(device_t &device, const char *root_tag) { // iterate over executable devices execute_interface_iterator execiter(device); for (device_execute_interface *exec = execiter.first(); exec != NULL; exec = execiter.next()) { if (strcmp(exec->device().tag(), device.tag())) { astring newtag(exec->device().tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); fprintf(m_output, "\t\t<chip"); fprintf(m_output, " type=\"cpu\""); fprintf(m_output, " tag=\"%s\"", xml_normalize_string(newtag)); fprintf(m_output, " name=\"%s\"", xml_normalize_string(exec->device().name())); fprintf(m_output, " clock=\"%d\"", exec->device().clock()); fprintf(m_output, "/>\n"); } } // iterate over sound devices sound_interface_iterator sounditer(device); for (device_sound_interface *sound = sounditer.first(); sound != NULL; sound = sounditer.next()) { if (strcmp(sound->device().tag(), device.tag())) { astring newtag(sound->device().tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); fprintf(m_output, "\t\t<chip"); fprintf(m_output, " type=\"audio\""); fprintf(m_output, " tag=\"%s\"", xml_normalize_string(newtag)); fprintf(m_output, " name=\"%s\"", xml_normalize_string(sound->device().name())); if (sound->device().clock() != 0) fprintf(m_output, " clock=\"%d\"", sound->device().clock()); fprintf(m_output, "/>\n"); } } }
void info_xml_creator::output_images(device_t &device, const char *root_tag) { image_interface_iterator iter(device); for (const device_image_interface *imagedev = iter.first(); imagedev != NULL; imagedev = iter.next()) { if (strcmp(imagedev->device().tag(), device.tag())) { astring newtag(imagedev->device().tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); // print m_output device type fprintf(m_output, "\t\t<device type=\"%s\"", xml_normalize_string(imagedev->image_type_name())); // does this device have a tag? if (imagedev->device().tag()) fprintf(m_output, " tag=\"%s\"", xml_normalize_string(newtag)); // is this device mandatory? if (imagedev->must_be_loaded()) fprintf(m_output, " mandatory=\"1\""); if (imagedev->image_interface() && imagedev->image_interface()[0]) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(imagedev->image_interface())); // close the XML tag fprintf(m_output, ">\n"); const char *name = imagedev->instance_name(); const char *shortname = imagedev->brief_instance_name(); fprintf(m_output, "\t\t\t<instance"); fprintf(m_output, " name=\"%s\"", xml_normalize_string(name)); fprintf(m_output, " briefname=\"%s\"", xml_normalize_string(shortname)); fprintf(m_output, "/>\n"); astring extensions(imagedev->file_extensions()); char *ext = strtok((char *)extensions.cstr(), ","); while (ext != NULL) { fprintf(m_output, "\t\t\t<extension"); fprintf(m_output, " name=\"%s\"", xml_normalize_string(ext)); fprintf(m_output, "/>\n"); ext = strtok(NULL, ","); } fprintf(m_output, "\t\t</device>\n"); } } }
static int aoehdr_atainit(struct aoedev *d, struct aoe_hdr *h) { u32 host_tag = newtag(d); memcpy(h->src, d->ifp->dev_addr, sizeof h->src); memcpy(h->dst, d->addr, sizeof h->dst); h->type = __constant_cpu_to_be16(ETH_P_AOE); h->verfl = AOE_HVER; h->major = cpu_to_be16(d->aoemajor); h->minor = d->aoeminor; h->cmd = AOECMD_ATA; h->tag = cpu_to_be32(host_tag); return host_tag; }
void info_xml_creator::output_slots(device_t &device, const char *root_tag) { slot_interface_iterator iter(device); for (const device_slot_interface *slot = iter.first(); slot != NULL; slot = iter.next()) { if (slot->fixed()) continue; // or shall we list these as non-configurable? if (strcmp(slot->device().tag(), device.tag())) { std::string newtag(slot->device().tag()), oldtag(":"); newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // print m_output device type fprintf(m_output, "\t\t<slot name=\"%s\">\n", xml_normalize_string(newtag.c_str())); /* if (slot->slot_interface()[0]) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(slot->slot_interface())); */ for (const device_slot_option *option = slot->first_option(); option != NULL; option = option->next()) { if (option->selectable()) { device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option->devtype(), 0); if (!dev->configured()) dev->config_complete(); fprintf(m_output, "\t\t\t<slotoption"); fprintf(m_output, " name=\"%s\"", xml_normalize_string(option->name())); fprintf(m_output, " devname=\"%s\"", xml_normalize_string(dev->shortname())); if (slot->default_option()) { if (strcmp(slot->default_option(),option->name())==0) fprintf(m_output, " default=\"yes\""); } fprintf(m_output, "/>\n"); const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), "dummy"); } } fprintf(m_output, "\t\t</slot>\n"); } } }
void info_xml_creator::output_slots(device_t &device, const char *root_tag) { slot_interface_iterator iter(device); for (const device_slot_interface *slot = iter.first(); slot != NULL; slot = iter.next()) { if (slot->fixed()) continue; // or shall we list these as non-configurable? if (strcmp(slot->device().tag(), device.tag())) { astring newtag(slot->device().tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); // print m_output device type fprintf(m_output, "\t\t<slot name=\"%s\">\n", xml_normalize_string(newtag)); /* if (slot->slot_interface()[0]) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(slot->slot_interface())); */ const slot_interface* intf = slot->get_slot_interfaces(); for (int i = 0; intf && intf[i].name != NULL && !intf[i].internal; i++) { device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", intf[i].devtype, 0); if (!dev->configured()) dev->config_complete(); fprintf(m_output, "\t\t\t<slotoption"); fprintf(m_output, " name=\"%s\"", xml_normalize_string(intf[i].name)); fprintf(m_output, " devname=\"%s\"", xml_normalize_string(dev->shortname())); if (slot->get_default_card()) { if (strcmp(slot->get_default_card(),intf[i].name)==0) fprintf(m_output, " default=\"yes\""); } fprintf(m_output, "/>\n"); const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), "dummy"); } fprintf(m_output, "\t\t</slot>\n"); } } }
static int hset(Aoedev *d, Frame *f, Aoehdr *h, int cmd) { int i; Devlink *l; if(f->srb && MACHP(0)->ticks - f->srb->ticksent > Maxreqticks){ eventlog("%æ: srb timeout\n", d); if(cmd == ACata && f->srb && Nofail(d, s)) f->srb->ticksent = MACHP(0)->ticks; else frameerror(d, f, Etimedout); return -1; } l = pickdevlink(d); i = pickea(l); if(i == -1){ if(cmd != ACata || f->srb == nil || !Nofail(d, s)) downdev(d, "resend fails; no netlink/ea"); return -1; } memmove(h->dst, l->eatab[i], Eaddrlen); memmove(h->src, l->nl->ea, sizeof h->src); hnputs(h->type, Aoetype); h->verflag = Aoever << 4; h->error = 0; hnputs(h->major, d->major); h->minor = d->minor; h->cmd = cmd; hnputl(h->tag, f->tag = newtag(d)); f->dl = l; f->nl = l->nl; f->eaidx = i; f->ticksent = MACHP(0)->ticks; return f->tag; }
void info_xml_creator::output_display(device_t &device, const char *root_tag) { // iterate over screens screen_device_iterator iter(device); for (const screen_device *screendev = iter.first(); screendev != NULL; screendev = iter.next()) { if (strcmp(screendev->tag(), device.tag())) { astring newtag(screendev->tag()), oldtag(":"); newtag.substr(newtag.find(oldtag.cat(root_tag)) + oldtag.len()); fprintf(m_output, "\t\t<display"); fprintf(m_output, " tag=\"%s\"", xml_normalize_string(newtag)); switch (screendev->screen_type()) { case SCREEN_TYPE_RASTER: fprintf(m_output, " type=\"raster\""); break; case SCREEN_TYPE_VECTOR: fprintf(m_output, " type=\"vector\""); break; case SCREEN_TYPE_LCD: fprintf(m_output, " type=\"lcd\""); break; default: fprintf(m_output, " type=\"unknown\""); break; } // output the orientation as a string switch (m_drivlist.driver().flags & ORIENTATION_MASK) { case ORIENTATION_FLIP_X: fprintf(m_output, " rotate=\"0\" flipx=\"yes\""); break; case ORIENTATION_FLIP_Y: fprintf(m_output, " rotate=\"180\" flipx=\"yes\""); break; case ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y: fprintf(m_output, " rotate=\"180\""); break; case ORIENTATION_SWAP_XY: fprintf(m_output, " rotate=\"90\" flipx=\"yes\""); break; case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X: fprintf(m_output, " rotate=\"90\""); break; case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_Y: fprintf(m_output, " rotate=\"270\""); break; case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y: fprintf(m_output, " rotate=\"270\" flipx=\"yes\""); break; default: fprintf(m_output, " rotate=\"0\""); break; } // output width and height only for games that are not vector if (screendev->screen_type() != SCREEN_TYPE_VECTOR) { const rectangle &visarea = screendev->visible_area(); fprintf(m_output, " width=\"%d\"", visarea.width()); fprintf(m_output, " height=\"%d\"", visarea.height()); } // output refresh rate fprintf(m_output, " refresh=\"%f\"", ATTOSECONDS_TO_HZ(screendev->refresh_attoseconds())); // output raw video parameters only for games that are not vector // and had raw parameters specified if (screendev->screen_type() != SCREEN_TYPE_VECTOR && !screendev->oldstyle_vblank_supplied()) { int pixclock = screendev->width() * screendev->height() * ATTOSECONDS_TO_HZ(screendev->refresh_attoseconds()); fprintf(m_output, " pixclock=\"%d\"", pixclock); fprintf(m_output, " htotal=\"%d\"", screendev->width()); fprintf(m_output, " hbend=\"%d\"", screendev->visible_area().min_x); fprintf(m_output, " hbstart=\"%d\"", screendev->visible_area().max_x+1); fprintf(m_output, " vtotal=\"%d\"", screendev->height()); fprintf(m_output, " vbend=\"%d\"", screendev->visible_area().min_y); fprintf(m_output, " vbstart=\"%d\"", screendev->visible_area().max_y+1); } fprintf(m_output, " />\n"); } } }
bool CKnownFile::LoadTagsFromFile(const CFileDataIO* file) { uint32 tagcount = file->ReadUInt32(); for (uint32 j = 0; j != tagcount; ++j) { CTag newtag(*file, true); switch(newtag.GetNameID()){ case FT_FILENAME: if (GetFileName().IsOk()) { // Unlike eMule, we actually prefer the second // filename tag, since we use it to specify the // 'universial' filename (see CPath::ToUniv). CPath path = CPath::FromUniv(newtag.GetStr()); // May be invalid, if from older versions where // unicoded filenames be saved as empty-strings. if (path.IsOk()) { SetFileName(path); } } else { SetFileName(CPath(newtag.GetStr())); } break; case FT_FILESIZE: SetFileSize(newtag.GetInt()); m_AvailPartFrequency.clear(); m_AvailPartFrequency.insert( m_AvailPartFrequency.begin(), GetPartCount(), 0); break; case FT_ATTRANSFERRED: statistic.alltimetransferred += newtag.GetInt(); break; case FT_ATTRANSFERREDHI: statistic.alltimetransferred = (((uint64)newtag.GetInt()) << 32) + ((uint64)statistic.alltimetransferred); break; case FT_ATREQUESTED: statistic.alltimerequested = newtag.GetInt(); break; case FT_ATACCEPTED: statistic.alltimeaccepted = newtag.GetInt(); break; case FT_ULPRIORITY: m_iUpPriority = newtag.GetInt(); if( m_iUpPriority == PR_AUTO ){ m_iUpPriority = PR_HIGH; m_bAutoUpPriority = true; } else { if ( m_iUpPriority != PR_VERYLOW && m_iUpPriority != PR_LOW && m_iUpPriority != PR_NORMAL && m_iUpPriority != PR_HIGH && m_iUpPriority != PR_VERYHIGH && m_iUpPriority != PR_POWERSHARE) { m_iUpPriority = PR_NORMAL; } m_bAutoUpPriority = false; } break; case FT_PERMISSIONS: // Ignore it, it's not used anymore. break; case FT_AICH_HASH: { CAICHHash hash; bool hashSizeOk = hash.DecodeBase32(newtag.GetStr()) == CAICHHash::GetHashSize(); wxASSERT(hashSizeOk); if (hashSizeOk) { m_pAICHHashSet->SetMasterHash(hash, AICH_HASHSETCOMPLETE); } break; } case FT_KADLASTPUBLISHSRC: SetLastPublishTimeKadSrc( newtag.GetInt(), 0 ); if(GetLastPublishTimeKadSrc() > (uint32)time(NULL)+KADEMLIAREPUBLISHTIMES) { //There may be a posibility of an older client that saved a random number here.. This will check for that.. SetLastPublishTimeKadSrc(0, 0); } break; case FT_KADLASTPUBLISHNOTES: SetLastPublishTimeKadNotes( newtag.GetInt() ); break; case FT_KADLASTPUBLISHKEY: // Just purge it wxASSERT( newtag.IsInt() ); break; default: // Store them here and write them back on saving. m_taglist.push_back(newtag); } } return true; }