cregit-Linux how code gets into the kernel

Release 4.11 drivers/zorro/names.c

Directory: drivers/zorro
/*
 *      Zorro Device Name Tables
 *
 *      Copyright (C) 1999--2000 Geert Uytterhoeven
 *
 *      Based on the PCI version:
 *
 *      Copyright 1992--1999 Drew Eckhardt, Frederic Potter,
 *      David Mosberger-Tang, Martin Mares
 */

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/zorro.h>



struct zorro_prod_info {
	
__u16 prod;
	
unsigned short seen;
	
const char *name;
};


struct zorro_manuf_info {
	
__u16 manuf;
	
unsigned short nr;
	
const char *name;
	
struct zorro_prod_info *prods;
};

/*
 * This is ridiculous, but we want the strings in
 * the .init section so that they don't take up
 * real memory.. Parse the same file multiple times
 * to get all the info.
 */

#define MANUF( manuf, name )		static char __manufstr_##manuf[] __initdata = name;

#define ENDMANUF()

#define PRODUCT( manuf, prod, name ) 	static char __prodstr_##manuf##prod[] __initdata = name;
#include "devlist.h"



#define MANUF( manuf, name )		static struct zorro_prod_info __prods_##manuf[] __initdata = {

#define ENDMANUF()			};

#define PRODUCT( manuf, prod, name )	{ 0x##prod, 0, __prodstr_##manuf##prod },
#include "devlist.h"


static struct zorro_manuf_info __initdata zorro_manuf_list[] = {

#define MANUF( manuf, name )		{ 0x##manuf, ARRAY_SIZE(__prods_##manuf), __manufstr_##manuf, __prods_##manuf },

#define ENDMANUF()

#define PRODUCT( manuf, prod, name )
#include "devlist.h"
};


#define MANUFS ARRAY_SIZE(zorro_manuf_list)


void __init zorro_name_device(struct zorro_dev *dev) { const struct zorro_manuf_info *manuf_p = zorro_manuf_list; int i = MANUFS; char *name = dev->name; do { if (manuf_p->manuf == ZORRO_MANUF(dev->id)) goto match_manuf; manuf_p++; } while (--i); /* Couldn't find either the manufacturer nor the product */ return; match_manuf: { struct zorro_prod_info *prod_p = manuf_p->prods; int i = manuf_p->nr; while (i > 0) { if (prod_p->prod == ((ZORRO_PROD(dev->id)<<8) | ZORRO_EPC(dev->id))) goto match_prod; prod_p++; i--; } /* Ok, found the manufacturer, but unknown product */ sprintf(name, "Zorro device %08x (%s)", dev->id, manuf_p->name); return; /* Full match */ match_prod: { char *n = name + sprintf(name, "%s %s", manuf_p->name, prod_p->name); int nr = prod_p->seen + 1; prod_p->seen = nr; if (nr > 1) sprintf(n, " (#%d)", nr); } } }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)198100.00%2100.00%
Total198100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)34298.84%250.00%
Himangi Saraogi20.58%125.00%
Linus Torvalds20.58%125.00%
Total346100.00%4100.00%
Directory: drivers/zorro
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.