/[gxemul]/trunk/src/devices/dev_cons.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/devices/dev_cons.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 11 by dpavlin, Mon Oct 8 16:18:27 2007 UTC revision 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_cons.c,v 1.26 2005/06/26 11:43:48 debug Exp $   *  $Id: dev_cons.c,v 1.27 2005/07/12 08:49:13 debug Exp $
29   *     *  
30   *  A console device.  (Fake, only useful for simple tests.)   *  A simple console device, useful for simple tests.
  *  It is hardwared to the lowest available MIPS hardware IRQ, and only  
  *  interrupts CPU 0.  
31   *   *
32   *  This device provides memory mapped I/O for a simple console supporting   *  This device provides memory mapped I/O for a simple console supporting
33   *  putchar (writing to memory) and getchar (reading from memory), and   *  putchar (writing to memory) and getchar (reading from memory), and
# Line 43  Line 41 
41    
42  #include "console.h"  #include "console.h"
43  #include "cpu.h"  #include "cpu.h"
44    #include "device.h"
45  #include "devices.h"  #include "devices.h"
46  #include "machine.h"  #include "machine.h"
47  #include "memory.h"  #include "memory.h"
# Line 51  Line 50 
50    
51  #define CONS_TICK_SHIFT         14  #define CONS_TICK_SHIFT         14
52    
 struct cons_data {  
         int             console_handle;  
         int             irq_nr;  
 };  
   
53    
54  /*  /*
55   *  dev_cons_tick():   *  dev_cons_tick():
# Line 119  int dev_cons_access(struct cpu *cpu, str Line 113  int dev_cons_access(struct cpu *cpu, str
113    
114    
115  /*  /*
116   *  dev_cons_init():   *  devinit_cons():
117   */   */
118  int dev_cons_init(struct machine *machine, struct memory *mem,  int devinit_cons(struct devinit *devinit)
         uint64_t baseaddr, char *name, int irq_nr)  
119  {  {
120          struct cons_data *d;          struct cons_data *d;
121          char *name2;          char *name3;
122          size_t nlen;          size_t nlen;
123    
124          d = malloc(sizeof(struct cons_data));          d = malloc(sizeof(struct cons_data));
# Line 134  int dev_cons_init(struct machine *machin Line 127  int dev_cons_init(struct machine *machin
127                  exit(1);                  exit(1);
128          }          }
129          memset(d, 0, sizeof(struct cons_data));          memset(d, 0, sizeof(struct cons_data));
         d->irq_nr = irq_nr;  
         d->console_handle = console_start_slave(machine, name);  
130    
131          nlen = strlen(name) + 20;          nlen = strlen(devinit->name) + 10;
132          name2 = malloc(nlen);          if (devinit->name2 != NULL)
133          if (name2 == NULL) {                  nlen += strlen(devinit->name2) + 10;
134            name3 = malloc(nlen);
135            if (name3 == NULL) {
136                  fprintf(stderr, "out of memory in dev_cons_init()\n");                  fprintf(stderr, "out of memory in dev_cons_init()\n");
137                  exit(1);                  exit(1);
138          }          }
139          if (name != NULL && name[0])          if (devinit->name2 != NULL && devinit->name2[0])
140                  snprintf(name2, nlen, "cons [%s]", name);                  snprintf(name3, nlen, "%s [%s]", devinit->name, devinit->name2);
141          else          else
142                  snprintf(name2, nlen, "cons");                  snprintf(name3, nlen, "%s", devinit->name);
143    
144            d->irq_nr = devinit->irq_nr;
145            d->console_handle = console_start_slave(devinit->machine, name3);
146    
147          memory_device_register(mem, name2, baseaddr, DEV_CONS_LENGTH,          memory_device_register(devinit->machine->memory, name3,
148              dev_cons_access, d, MEM_DEFAULT, NULL);              devinit->addr, DEV_CONS_LENGTH, dev_cons_access, d,
149          machine_add_tickfunction(machine, dev_cons_tick, d, CONS_TICK_SHIFT);              MEM_DEFAULT, NULL);
150            machine_add_tickfunction(devinit->machine, dev_cons_tick,
151                d, CONS_TICK_SHIFT);
152    
153          return d->console_handle;          devinit->return_ptr = d;
154            return 1;
155  }  }
156    

Legend:
Removed from v.11  
changed lines
  Added in v.12

  ViewVC Help
Powered by ViewVC 1.1.26