/[gxemul]/trunk/src/devices/dev_sandpoint.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_sandpoint.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 34 by dpavlin, Mon Oct 8 16:21:17 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2005-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_pmppc.c,v 1.2 2005/02/15 06:25:34 debug Exp $   *  $Id: dev_pmppc.c,v 1.8 2007/01/29 18:06:52 debug Exp $
29   *     *  
30   *  PM/PPC devices.   *  PM/PPC devices.
31   *   *
# Line 37  Line 37 
37  #include <string.h>  #include <string.h>
38    
39  #include "cpu.h"  #include "cpu.h"
40  #include "devices.h"  #include "device.h"
41  #include "machine.h"  #include "machine.h"
42  #include "memory.h"  #include "memory.h"
43  #include "misc.h"  #include "misc.h"
# Line 53  struct pmppc_data { Line 53  struct pmppc_data {
53  };  };
54    
55    
56  /*  DEVICE_ACCESS(pmppc_board)
  *  dev_pmppc_board_access():  
  */  
 int dev_pmppc_board_access(struct cpu *cpu, struct memory *mem,  
         uint64_t relative_addr, unsigned char *data, size_t len, int writeflag,  
         void *extra)  
57  {  {
58          struct pmppc_data *d = extra;          struct pmppc_data *d = extra;
59          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
60    
61          idata = memory_readmax64(cpu, data, len);          if (writeflag == MEM_WRITE)
62                    idata = memory_readmax64(cpu, data, len);
63    
64          relative_addr += PMPPC_CONFIG0;          relative_addr += PMPPC_CONFIG0;
65    
# Line 114  int dev_pmppc_board_access(struct cpu *c Line 110  int dev_pmppc_board_access(struct cpu *c
110  }  }
111    
112    
113  /*  DEVINIT(pmppc)
  *  dev_pmppc_init():  
  */  
 void dev_pmppc_init(struct memory *mem)  
114  {  {
115          struct pmppc_data *d;          struct pmppc_data *d;
116            struct memory *mem = devinit->machine->memory;
117    
118          d = malloc(sizeof(struct pmppc_data));          d = malloc(sizeof(struct pmppc_data));
119          if (d == NULL) {          if (d == NULL) {
# Line 134  void dev_pmppc_init(struct memory *mem) Line 128  void dev_pmppc_init(struct memory *mem)
128           *  config0:           *  config0:
129           *      bit 7           Is monarch (?).           *      bit 7           Is monarch (?).
130           *      bit 5           Has ethernet.           *      bit 5           Has ethernet.
131           *      bit 4           Has RTC.           *      bit 4           1 = No RTC.
132           *      bits 3..2       Flash size (00 = 256 MB, 01 = 128 MB,           *      bits 3..2       Flash size (00 = 256 MB, 01 = 128 MB,
133           *                      10 = 64 MB, 11 = 32 MB).           *                      10 = 64 MB, 11 = 32 MB).
134           *      bits 1..0       Flash width (00 = 64, 01 = 32, 10 = 16, 11 = 0).           *      bits 1..0       Flash width (00 = 64, 01 = 32, 10 = 16, 11 = 0).
# Line 148  void dev_pmppc_init(struct memory *mem) Line 142  void dev_pmppc_init(struct memory *mem)
142           *      bits 1..0       Bus frequency: 00 = 66.66 MHz, 01 = 83.33 MHz,           *      bits 1..0       Bus frequency: 00 = 66.66 MHz, 01 = 83.33 MHz,
143           *                      10 = 100.00 MHz, 11 = reserved?           *                      10 = 100.00 MHz, 11 = reserved?
144           */           */
145          d->config0 = 0x30;          d->config0 = 0x20;
146          d->config1 = 0;         /*  TODO  */          d->config1 = 0;
147    
148            if (mem->physical_max == 32*1048576) {
149            } else if (mem->physical_max == 64*1048576) {
150                    d->config1 |= 0x01;
151            } else if (mem->physical_max == 128*1048576) {
152                    d->config1 |= 0x10;
153            } else if (mem->physical_max == 256*1048576) {
154                    d->config1 |= 0x11;
155            } else {
156                    fatal("A PM/PPC can have 32, 64, 128, or 256 MB RAM.\n");
157                    exit(1);
158            }
159    
160          memory_device_register(mem, "pmppc_board",          memory_device_register(mem, "pmppc_board",
161              PMPPC_CONFIG0, 0x10, dev_pmppc_board_access, d, MEM_DEFAULT, NULL);              PMPPC_CONFIG0, 0x10, dev_pmppc_board_access, d, DM_DEFAULT, NULL);
162    
163            return 1;
164  }  }
165    

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

  ViewVC Help
Powered by ViewVC 1.1.26