- A pass at staticizing things.

- Try to have all output go through the routines in util.c [logerr(),
  log_1s(), die()]
- Add *some* code in util.c to allow pccardd to run out of sysinstall.

Submitted by: Mostly me, but some by Tatsumi Hosokawa <hosokawa@jp.FreeBSD.org>
This commit is contained in:
Nate Williams 1997-01-06 08:35:06 +00:00
parent dc9d5eda2a
commit 16a960917f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=21371
5 changed files with 134 additions and 110 deletions

View File

@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: cardd.c,v 1.12 1996/06/19 17:27:55 nate Exp $
* $Id: cardd.c,v 1.13 1996/06/20 21:06:51 nate Exp $
*/
#include <stdio.h>
@ -34,21 +34,21 @@
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <syslog.h>
#define EXTERN
#include "cardd.h"
char *config_file = "/etc/pccard.conf";
struct card_config *assign_driver(struct card *);
int setup_slot(struct slot *);
void read_ether(struct slot *);
void dump_config_file(void);
void pr_cmd(struct cmd *);
void readslots(void);
void slot_change(struct slot *);
void card_removed(struct slot *);
void card_inserted(struct slot *);
int assign_io(struct slot *);
static struct card_config *assign_driver(struct card *);
static int assign_io(struct slot *);
static int setup_slot(struct slot *);
static void card_inserted(struct slot *);
static void card_removed(struct slot *);
static void dump_config_file(void);
static void pr_cmd(struct cmd *);
static void read_ether(struct slot *);
static void readslots(void);
static void slot_change(struct slot *);
/*
* mainline code for cardd
@ -93,35 +93,22 @@ main(int argc, char *argv[])
readfile(config_file);
if (verbose)
dump_config_file();
if (!debug) {
log_setup();
if (!debug)
if (daemon(0, 0))
die("fork failed");
openlog("cardd", LOG_PID, LOG_DAEMON);
do_log = 1;
}
#ifdef DEBUG
printf("Before readslots\n");
#endif
readslots();
#ifdef DEBUG
printf("After readslots\n");
#endif
if (slots == 0)
die("No PC-CARD slots");
log_1s("pccardd started", NULL);
for (;;) {
fd_set mask;
FD_ZERO(&mask);
for (sp = slots; sp; sp = sp->next)
FD_SET(sp->fd, &mask);
#ifdef DEBUG
printf("Doing select\n");
#endif
count = select(32, 0, 0, &mask, 0);
#ifdef DEBUG
printf("select=%d\n", count);
#endif
if (count == -1) {
perror("Select");
logerr("Select");
continue;
}
if (count)
@ -157,8 +144,8 @@ dump_config_file(void)
}
}
void
pr_cmd(struct cmd * cp)
static void
pr_cmd(struct cmd *cp)
{
while (cp) {
printf("\t%s\n", cp->line);
@ -182,9 +169,6 @@ readslots(void)
fd = open(name, 2);
if (fd < 0)
continue;
#ifdef DEBUG
printf("opened %s\n", name);
#endif
sp = xmalloc(sizeof(*sp));
sp->fd = fd;
sp->name = newstr(name);
@ -196,16 +180,16 @@ readslots(void)
unsigned long mem = 0;
if (ioctl(fd, PIOCRWMEM, &mem))
perror("ioctl (PIOCRWMEM)");
logerr("ioctl (PIOCRWMEM)");
#ifdef DEBUG
printf("mem=%x\n", mem);
log_1s("mem=0x%x\n", mem);
#endif
if (mem == 0) {
mem = alloc_memory(4 * 1024);
if (mem == 0)
die("Can't allocate memory for controller access");
if (ioctl(fd, PIOCRWMEM, &mem))
perror("ioctl (PIOCRWMEM)");
logerr("ioctl (PIOCRWMEM)");
}
}
#ifdef DEBUG
@ -228,12 +212,9 @@ slot_change(struct slot *sp)
current_slot = sp;
if (ioctl(sp->fd, PIOCGSTATE, &state)) {
perror("ioctl (PIOCGSTATE)");
logerr("ioctl (PIOCGSTATE)");
return;
}
#ifdef DEBUG
printf("%p %p %d %d\n", sp, &sp->state, state.state, sp->state);
#endif
if (state.state == sp->state)
return;
sp->state = state.state;
@ -309,8 +290,8 @@ card_inserted(struct slot *sp)
reset_slot(sp);
#endif
if (cp == 0) {
log_1s("No card in database for \"%s\"", sp->cis->manuf);
log_1s("vers: \"%s\"", sp->cis->vers);
log_1s("No card in database for \"%s\"(\"%s\")",
sp->cis->manuf, sp->cis->vers);
return;
}
if (cp->ether)
@ -326,8 +307,9 @@ card_inserted(struct slot *sp)
}
/*
* Once assigned, then set up the I/O & mem contexts, and
* set up the windows, and then attach the driver.
*
* Once assigned, set up the I/O & mem contexts, set up the
* windows, and then attach the driver.
*/
if (setup_slot(sp))
execute(cp->insert);
@ -341,7 +323,7 @@ card_inserted(struct slot *sp)
* read_ether - read ethernet address from card. Offset is
* the offset into the attribute memory of the card.
*/
void
static void
read_ether(struct slot *sp)
{
unsigned char net_addr[12];
@ -357,7 +339,7 @@ read_ether(struct slot *sp)
sp->eaddr[3] = net_addr[6];
sp->eaddr[4] = net_addr[8];
sp->eaddr[5] = net_addr[10];
printf("Ether=%02x:%02x:%02x:%02x:%02x:%02x\n",
log_1s("Ether=%02x:%02x:%02x:%02x:%02x:%02x\n",
sp->eaddr[0], sp->eaddr[1], sp->eaddr[2],
sp->eaddr[3], sp->eaddr[4], sp->eaddr[5]);
}
@ -366,7 +348,7 @@ read_ether(struct slot *sp)
* assign_driver - Assign driver to card.
* First, see if an existing driver is already setup.
*/
struct card_config *
static struct card_config *
assign_driver(struct card *cp)
{
struct driver *drvp;
@ -376,7 +358,7 @@ assign_driver(struct card *cp)
if (conf->inuse == 0 && conf->driver->card == cp &&
conf->driver->config == conf) {
#ifdef DEBUG
fprintf(stderr, "Found existing driver (%s) for %s\n",
log_1s(stderr, "Found existing driver (%s) for %s\n",
conf->driver->name, cp->manuf);
#endif
return (conf);
@ -455,7 +437,7 @@ assign_driver(struct card *cp)
* assign_io - Allocate resources to slot matching the
* configuration index selected.
*/
int
static int
assign_io(struct slot *sp)
{
struct cis *cis;
@ -492,14 +474,13 @@ assign_io(struct slot *sp)
if (sp->mem.size && sp->mem.addr == 0) {
sp->mem.addr = alloc_memory(mp->length);
if (sp->mem.addr == 0)
return (-1);
return (-2);
sp->config->driver->mem = sp->mem.addr;
}
sp->mem.cardaddr = 0x4000;
#ifdef DEBUG
fprintf(stderr,
"Using mem addr 0x%x, size %d, card addr 0x%x\n",
sp->mem.addr, sp->mem.cardaddr, sp->mem.size);
log_1s("Using mem addr 0x%x, size %d, card addr 0x%x\n",
sp->mem.addr, sp->mem.size, sp->mem.cardaddr);
#endif
}
@ -554,18 +535,19 @@ assign_io(struct slot *sp)
break;
}
#ifdef DEBUG
fprintf(stderr, "Using I/O addr 0x%x, size %d\n",
log_1s("Using I/O addr 0x%x, size %d\n",
sp->io.addr, sp->io.size);
#endif
}
sp->irq = sp->config->irq;
return (0);
}
/*
* setup_slot - Allocate the I/O and memory contexts
* return true if completed OK.
*/
int
static int
setup_slot(struct slot *sp)
{
struct mem_desc mem;
@ -594,9 +576,8 @@ setup_slot(struct slot *sp)
c |= 0x40;
write(sp->fd, &c, sizeof(c));
#ifdef DEBUG
printf("Setting config reg at offs 0x%x", offs);
printf(" to 0x%x\n", c);
printf("Reset time = %d ms\n", sp->card->reset_time);
log_1s("Setting config reg at offs 0x%lx to 0x%x, Reset time = %d ms\n",
(unsigned long)offs, c, sp->card->reset_time);
#endif
sleep(5);
usleep(sp->card->reset_time * 1000);
@ -612,14 +593,8 @@ setup_slot(struct slot *sp)
c |= 0x20;
lseek(sp->fd, offs + 2, SEEK_SET);
write(sp->fd, &c, sizeof(c));
#ifdef DEBUG
printf("Setting CCSR reg to 0x%x\n", c);
#endif
}
mem.window = 0;
#ifdef DEBUG
printf("Mem@ %x %d %x\n", sp->mem.addr, sp->mem.size, sp->mem.cardaddr);
#endif
if (sp->mem.addr) {
mem.window = 0;
mem.flags = sp->mem.flags | MDF_ACTIVE | MDF_16BITS;
@ -645,8 +620,8 @@ setup_slot(struct slot *sp)
}
#endif
#ifdef DEBUG
printf("Assigning I/O window 0, start 0x%x, size 0x%x flags 0x%x\n",
io.start, io.size, io.flags);
log_1s("Assigning I/O window %d, start 0x%x, size 0x%x flags 0x%x\n",
io.window, io.start, io.size, io.flags);
#endif
io.flags |= IODF_ACTIVE;
if (ioctl(sp->fd, PIOCSIO, &io)) {
@ -670,9 +645,9 @@ setup_slot(struct slot *sp)
else
drv.iobase = 0;
#ifdef DEBUG
fprintf(stderr, "Assign %s%d, io 0x%x, mem 0x%x, %d bytes, irq %x, flags %x\n",
log_1s("Assign %s%d, io 0x%x, mem 0x%lx, %d bytes, irq %d, flags %x\n",
drv.name, drv.unit, drv.iobase, drv.mem, drv.memsize, sp->irq, drv.flags);
#endif /* DEBUG */
#endif
/*
* If the driver fails to be connected to the device,
@ -680,9 +655,6 @@ setup_slot(struct slot *sp)
*/
memcpy(drv.misc, sp->eaddr, 6);
if (ioctl(sp->fd, PIOCSDRV, &drv)) {
#ifdef DEBUG
perror(sp->card->manuf);
#endif
log_1s("driver allocation failed for %s", sp->card->manuf);
return (0);
}

View File

@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: cardd.h,v 1.4 1996/04/18 04:25:12 nate Exp $
* $Id: cardd.h,v 1.5 1996/06/18 19:52:29 nate Exp $
*
* Common include file for PCMCIA daemon
*/
@ -34,6 +34,10 @@
#include "readcis.h"
#ifndef EXTERN
#define EXTERN extern
#endif
struct cmd {
struct cmd *next;
char *line; /* Command line */
@ -107,28 +111,32 @@ struct slot {
int irq; /* Irq value */
};
struct slot *slots, *current_slot;
EXTERN struct slot *slots, *current_slot;
struct allocblk *pool_ioblks; /* I/O blocks in the pool */
struct allocblk *pool_mem; /* Memory in the pool */
int pool_irq[16]; /* IRQ allocations */
struct driver *drivers; /* List of drivers */
struct card *cards;
bitstr_t *mem_avail;
bitstr_t *io_avail;
EXTERN struct allocblk *pool_ioblks; /* I/O blocks in the pool */
EXTERN struct allocblk *pool_mem; /* Memory in the pool */
EXTERN int pool_irq[16]; /* IRQ allocations */
EXTERN struct driver *drivers; /* List of drivers */
EXTERN struct card *cards;
EXTERN bitstr_t *mem_avail;
EXTERN bitstr_t *io_avail;
int verbose, do_log;
EXTERN int verbose;
char *newstr();
void die(char *);
void *xmalloc(int);
void log_1s(char *, char *);
void logerr(char *);
void reset_slot(struct slot *);
void execute(struct cmd *);
void readfile(char *);
int bit_fns(bitstr_t *, int, int);
/* util.c functions */
unsigned long alloc_memory(int);
int bit_fns(bitstr_t *, int, int);
void die(char *);
void execute(struct cmd *);
void log_1s(const char *, ...);
void log_setup(void);
void logerr(char *);
char *newstr();
void reset_slot(struct slot *);
void *xmalloc(int);
/* file.c */
void readfile(char *);
#define IOPORTS 0x400
#define MEMUNIT 0x1000

View File

@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: file.c,v 1.7 1996/06/19 01:08:58 nate Exp $
* $Id: file.c,v 1.8 1996/07/11 15:04:43 nate Exp $
*/
#include <stdio.h>
#include <stdlib.h>
@ -69,7 +69,7 @@ static struct allocblk *ioblk_tok(int);
static struct allocblk *memblk_tok(int);
static struct driver *new_driver(char *);
static void addcmd(struct cmd **cp);
static void addcmd(struct cmd **);
static void parse_card(void);
/*
@ -83,14 +83,13 @@ readfile(char *name)
in = fopen(name, "r");
if (in == 0) {
perror(name);
exit(1);
logerr(name);
die("readfile");
}
parsefile();
for (cp = cards; cp; cp = cp->next) {
if (cp->config == 0)
fprintf(stderr,
"warning: card %s(%s) has no valid configuration\n",
log_1s("warning: card %s(%s) has no valid configuration\n",
cp->manuf, cp->version);
}
}
@ -398,7 +397,7 @@ static void
error(char *msg)
{
pusht = 1;
fprintf(stderr, "%s: %s at line %d, near %s\n",
log_1s("%s: %s at line %d, near %s\n",
filename, msg, lineno, next_tok());
pusht = 1;
}

View File

@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: readcis.c,v 1.5 1996/06/17 22:30:29 nate Exp $
* $Id: readcis.c,v 1.6 1996/06/18 21:58:51 nate Exp $
*/
#include <stdio.h>
#include <unistd.h>
@ -493,8 +493,7 @@ read_one_tuplelist(int fd, int flags, off_t offs)
total++;
tp->length = length;
#ifdef DEBUG
fprintf(stderr, "Tuple code = 0x%x, len = %d\n",
code, length);
printf("Tuple code = 0x%x, len = %d\n", code, length);
#endif
if (length == 0xFF) {
length = tp->length = 0;

View File

@ -23,28 +23,59 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: util.c,v 1.5 1996/04/18 04:25:17 nate Exp $
* $Id: util.c,v 1.6 1996/06/20 21:06:53 nate Exp $
*/
/*
* Code cleanup, bug-fix and extension
* by:
* Tatsumi Hosokawa <hosokawa@jp.FreeBSD.org>
* Nate Williams <nate@FreeBSD.org>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <syslog.h>
#ifdef SYSINSTALL
#include <dialog.h>
#endif
#include "cardd.h"
static int do_log = 0;
void
log_1s(char *msg, char *arg)
log_setup(void)
{
#ifndef SYSINSTALL
do_log = 1;
openlog("pccardd", LOG_PID, LOG_DAEMON);
#endif
}
void
log_1s(const char *fmt, ...)
{
va_list ap;
char s[256];
va_start(ap, fmt);
vsprintf(s, fmt, ap);
if (do_log)
syslog(LOG_ERR, msg, arg);
syslog(LOG_ERR, s);
else {
fprintf(stderr, "cardd: ");
fprintf(stderr, msg, arg);
fprintf(stderr, "\n");
#ifdef SYSINSTALL
dialog_clear();
msgConfirm(s);
#else
fprintf(stderr, "cardd: %s\n", s);
#endif
}
}
@ -53,8 +84,14 @@ logerr(char *msg)
{
if (do_log)
syslog(LOG_ERR, "%s: %m", msg);
else
else {
#ifdef SYSINSTALL
dialog_clear();
msgConfirm(msg);
#else
perror(msg);
#endif
}
}
/*
@ -65,8 +102,17 @@ die(char *msg)
{
if (do_log)
syslog(LOG_CRIT, "fatal error: %s", msg);
else
else {
#ifdef SYSINSTALL
char s[256];
sprintf(s, "cardd fatal error: %s\n", msg);
dialog_clear();
msgConfirm(s);
#else
fprintf(stderr, "cardd fatal error: %s\n", msg);
#endif
}
closelog();
exit(1);
}
@ -216,7 +262,7 @@ execute(struct cmd *cmdp)
continue;
#ifdef DEBUG
fprintf(stderr, "Executing [%s]\n", cmd);
#endif /* DEBUG */
#endif
system(cmd);
}
}