/[gxemul]/trunk/src/devices/dev_kn220.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_kn220.c

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

revision 4 by dpavlin, Mon Oct 8 16:18:00 2007 UTC revision 42 by dpavlin, Mon Oct 8 16:22:32 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2004-2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2004-2007  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_kn220.c,v 1.3 2005/02/21 07:01:08 debug Exp $   *  $Id: dev_kn220.c,v 1.8 2007/06/15 19:11:15 debug Exp $
29   *     *  
30   *  DEC KN220 (DECsystem 5500) devices.   *  COMMENT: DEC KN220 (DECsystem 5500) devices
31   *   *
32   *      o)  I/O board   *      o)  I/O board
33   *      o)  SGEC (ethernet)  (Called "ne" in Ultrix.)   *      o)  SGEC (ethernet)  (Called "ne" in Ultrix.)
# Line 59  struct sgec_data { Line 59  struct sgec_data {
59  /*  /*
60   *  dev_dec5500_ioboard_access():   *  dev_dec5500_ioboard_access():
61   */   */
62  int dev_dec5500_ioboard_access(struct cpu *cpu, struct memory *mem,  DEVICE_ACCESS(dec5500_ioboard)
         uint64_t relative_addr, unsigned char *data, size_t len,  
         int writeflag, void *extra)  
63  {  {
64          /*  struct dec5500_ioboard_data *d =          /*  struct dec5500_ioboard_data *d =
65              (struct dec5500_ioboard_data *) extra;  */              (struct dec5500_ioboard_data *) extra;  */
66          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
67    
68          idata = memory_readmax64(cpu, data, len);          if (writeflag == MEM_WRITE)
69                    idata = memory_readmax64(cpu, data, len);
70    
71  #ifdef IOBOARD_DEBUG  #ifdef IOBOARD_DEBUG
72          if (writeflag == MEM_WRITE)          if (writeflag == MEM_WRITE)
# Line 109  int dev_dec5500_ioboard_access(struct cp Line 108  int dev_dec5500_ioboard_access(struct cp
108  /*  /*
109   *  dev_sgec_access():   *  dev_sgec_access():
110   */   */
111  int dev_sgec_access(struct cpu *cpu, struct memory *mem,  DEVICE_ACCESS(sgec)
         uint64_t relative_addr, unsigned char *data, size_t len,  
         int writeflag, void *extra)  
112  {  {
113          /*  struct sgec_data *d = (struct sgec_data *) extra;  */          /*  struct sgec_data *d = (struct sgec_data *) extra;  */
114          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
# Line 155  int dev_sgec_access(struct cpu *cpu, str Line 152  int dev_sgec_access(struct cpu *cpu, str
152   */   */
153  void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr)  void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr)
154  {  {
155          struct sgec_data *d = malloc(sizeof(struct sgec_data));          struct sgec_data *d;
156          if (d == NULL) {  
157                  fprintf(stderr, "out of memory\n");          CHECK_ALLOCATION(d = malloc(sizeof(struct sgec_data)));
                 exit(1);  
         }  
158          memset(d, 0, sizeof(struct sgec_data));          memset(d, 0, sizeof(struct sgec_data));
159    
160          d->irq_nr = irq_nr;          d->irq_nr = irq_nr;
161    
162          memory_device_register(mem, "sgec", baseaddr, DEV_SGEC_LENGTH,          memory_device_register(mem, "sgec", baseaddr, DEV_SGEC_LENGTH,
163              dev_sgec_access, (void *)d, MEM_DEFAULT, NULL);              dev_sgec_access, (void *)d, DM_DEFAULT, NULL);
164  }  }
165    
166    
# Line 174  void dev_sgec_init(struct memory *mem, u Line 170  void dev_sgec_init(struct memory *mem, u
170  struct dec5500_ioboard_data *dev_dec5500_ioboard_init(struct cpu *cpu,  struct dec5500_ioboard_data *dev_dec5500_ioboard_init(struct cpu *cpu,
171          struct memory *mem, uint64_t baseaddr)          struct memory *mem, uint64_t baseaddr)
172  {  {
173          struct dec5500_ioboard_data *d =          struct dec5500_ioboard_data *d;
174              malloc(sizeof(struct dec5500_ioboard_data));  
175          if (d == NULL) {          CHECK_ALLOCATION(d = malloc(sizeof(struct dec5500_ioboard_data)));
                 fprintf(stderr, "out of memory\n");  
                 exit(1);  
         }  
176          memset(d, 0, sizeof(struct dec5500_ioboard_data));          memset(d, 0, sizeof(struct dec5500_ioboard_data));
177    
178          memory_device_register(mem, "dec5500_ioboard", baseaddr,          memory_device_register(mem, "dec5500_ioboard", baseaddr,
179              DEV_DEC5500_IOBOARD_LENGTH, dev_dec5500_ioboard_access,              DEV_DEC5500_IOBOARD_LENGTH, dev_dec5500_ioboard_access,
180              (void *)d, MEM_DEFAULT, NULL);              (void *)d, DM_DEFAULT, NULL);
181    
182          return d;          return d;
183  }  }

Legend:
Removed from v.4  
changed lines
  Added in v.42

  ViewVC Help
Powered by ViewVC 1.1.26