annotate gsm-fw/L1/cust0/pirelli.c @ 941:6b0b2f6dbb20

gsm-fw/services/ffs/drv.c: AMD multi-bank flash driver fixed for Pirelli and future FreeCalypso hardware
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 01 Nov 2015 00:07:09 +0000
parents 452a4aea3fc5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
890
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
2 * This module is a FreeCalypso addition. Here we implement
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
3 * retrieval of Pirelli's factory calibration and IMEI records
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
4 * from their factory data block.
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
5 */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
6
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
7 #include <string.h>
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
8 #include "config.h"
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
9 #include "sys_types.h"
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
10 #include "../../services/ffs/ffs.h"
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
11 #include "../../services/ffs/core.h" /* for ffs_begin() and ffs_end() */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
12
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
13 #define FACTORY_BLOCK_BASE_ADDR 0x027F0000
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
14
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
15 static effs_t
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
16 pirelli_chksum(uint8 *addr, T_FFS_SIZE size)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
17 {
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
18 uint8 accum = 0;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
19
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
20 for (; size; size--)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
21 accum += *addr++;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
22 if (accum == *addr)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
23 return EFFS_OK;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
24 else
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
25 return EFFS_CORRUPTED;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
26 }
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
27
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
28 pirelli_read_factory_record(uint32 offset, void *userbuf, T_FFS_SIZE size,
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
29 int has_chksum)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
30 {
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
31 effs_t rc;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
32 uint8 *flash_record = (uint8 *) FACTORY_BLOCK_BASE_ADDR + offset;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
33
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
34 rc = ffs_begin();
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
35 if (rc != EFFS_OK)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
36 return(rc);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
37 if (has_chksum)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
38 rc = pirelli_chksum(flash_record, size);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
39 if (rc == EFFS_OK)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
40 bcopy(flash_record, userbuf, size);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
41 return ffs_end(rc);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
42 }
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
43
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
44 static const struct calmap {
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
45 uint32 offset;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
46 char *ti_equiv;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
47 } pirelli_cal_map[] = {
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
48 {0x06E5, "/sys/adccal"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
49 {0x072B, "/gsm/rf/tx/ramps.900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
50 {0x092C, "/gsm/rf/tx/levels.900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
51 {0x09AD, "/gsm/rf/tx/calchan.900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
52 {0x0A2E, "/gsm/rf/tx/ramps.1800"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
53 {0x0C2F, "/gsm/rf/tx/levels.1800"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
54 {0x0CB0, "/gsm/rf/tx/calchan.1800"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
55 {0x0D31, "/gsm/rf/tx/ramps.1900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
56 {0x0F32, "/gsm/rf/tx/levels.1900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
57 {0x0FB3, "/gsm/rf/tx/calchan.1900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
58 {0x10AF, "/gsm/rf/rx/calchan.900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
59 {0x10D8, "/gsm/rf/rx/agcparams.900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
60 {0x10E1, "/gsm/rf/rx/calchan.1800"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
61 {0x110A, "/gsm/rf/rx/agcparams.1800"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
62 {0x1113, "/gsm/rf/rx/calchan.1900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
63 {0x113C, "/gsm/rf/rx/agcparams.1900"},
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
64 {0, 0}
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
65 };
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
66
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
67 pirelli_cal_fread(const char *name, void *userbuf, T_FFS_SIZE size)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
68 {
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
69 int rc;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
70 const struct calmap *map;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
71
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
72 /* try FFS first, so FreeCalypso user can override factory prog */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
73 rc = ffs_file_read(name, userbuf, size);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
74 if (rc >= 0)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
75 return EFFS_OK;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
76 /* does the sought file correspond to a Pirelli factory data record? */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
77 for (map = pirelli_cal_map; map->ti_equiv; map++)
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
78 if (!strcmp(map->ti_equiv, name))
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
79 break;
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
80 if (!map->offset) /* not found */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
81 return rc; /* return error code from FFS */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
82 /* found it */
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
83 return pirelli_read_factory_record(map->offset, userbuf, size, 1);
452a4aea3fc5 gsm-fw: implemented reading of Pirelli's factory calibration records
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
diff changeset
84 }