OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [uclinux/] [uClinux-2.0.x/] [drivers/] [scsi/] [AM53C974.h] - Blame information for rev 1782

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/* AM53/79C974 (PCscsi) driver release 0.5
2
 *
3
 * The architecture and much of the code of this device
4
 * driver was originally developed by Drew Eckhardt for
5
 * the NCR5380. The following copyrights apply:
6
 *  For the architecture and all parts similar to the NCR5380:
7
 *    Copyright 1993, Drew Eckhardt
8
 *      Visionary Computing
9
 *      (Unix and Linux consulting and custom programming)
10
 *      drew@colorado.edu
11
 *      +1 (303) 666-5836
12
 *
13
 *  The AM53C974_nobios_detect code was originally developed by
14
 *   Robin Cutshaw (robin@xfree86.org) and is used here in a
15
 *   modified form.
16
 *
17
 *  For the other parts:
18
 *    Copyright 1994, D. Frieauff
19
 *    EMail: fri@rsx42sun0.dofn.de
20
 *    Phone: x49-7545-8-2256 , x49-7541-42305
21
 */
22
 
23
/*
24
 * $Log: not supported by cvs2svn $
25
 * Revision 1.1.1.1  2001/07/02 17:58:29  simons
26
 * Initial revision
27
 *
28
 */
29
 
30
#ifndef AM53C974_H
31
#define AM53C974_H
32
 
33
#include <scsi/scsicam.h>
34
 
35
/***************************************************************************************
36
* Default setting of the controller's SCSI id. Edit and uncomment this only if your    *
37
* BIOS does not correctly initialize the controller's SCSI id.                         *
38
* If you don't get a warning during boot, it is correctly initialized.                 *
39
****************************************************************************************/
40
/* #define AM53C974_SCSI_ID 7 */
41
 
42
/***************************************************************************************
43
* Default settings for sync. negotiation enable, transfer rate and sync. offset.       *
44
* These settings can be replaced by LILO overrides (append) with the following syntax:          *
45
* AM53C974=host-scsi-id, target-scsi-id, max-rate, max-offset                          *
46
* Sync. negotiation is disabled by default and will be enabled for those targets which *
47
* are specified in the LILO override                                                   *
48
****************************************************************************************/
49
#define DEFAULT_SYNC_NEGOTIATION_ENABLED 0 /* 0 or 1 */
50
#define DEFAULT_RATE                     5 /* MHz, min: 3; max: 10 */
51
#define DEFAULT_SYNC_OFFSET              0 /* bytes, min: 0; max: 15; use 0 for async. mode */
52
 
53
 
54
/* --------------------- don't edit below here  --------------------- */
55
 
56
#define AM53C974_DRIVER_REVISION_MAJOR 0
57
#define AM53C974_DRIVER_REVISION_MINOR 5
58
#define SEPARATOR_LINE  \
59
"--------------------------------------------------------------------------\n"
60
 
61
/* debug control */
62
/* #define AM53C974_DEBUG */
63
/* #define AM53C974_DEBUG_MSG */
64
/* #define AM53C974_DEBUG_KEYWAIT */
65
/* #define AM53C974_DEBUG_INIT */
66
/* #define AM53C974_DEBUG_QUEUE */
67
/* #define AM53C974_DEBUG_INFO */
68
/* #define AM53C974_DEBUG_LINKED */
69
/* #define VERBOSE_AM53C974_DEBUG */
70
/* #define AM53C974_DEBUG_INTR */
71
/* #define AM53C974_DEB_RESEL */
72
#define AM53C974_DEBUG_ABORT
73
/* #define AM53C974_OPTION_DEBUG_PROBE_ONLY */
74
 
75
/* special options/constants */
76
#define DEF_CLK                 40   /* chip clock freq. in MHz */
77
#define MIN_PERIOD               4   /* for negotiation: min. number of clocks per cycle */
78
#define MAX_PERIOD              13   /* for negotiation: max. number of clocks per cycle */
79
#define MAX_OFFSET              15   /* for negotiation: max. offset (0=async) */
80
 
81
#define DEF_SCSI_TIMEOUT        245  /* STIMREG value, 40 Mhz */
82
#define DEF_STP                 8    /* STPREG value assuming 5.0 MB/sec, FASTCLK, FASTSCSI */
83
#define DEF_SOF_RAD             0    /* REQ/ACK deassertion delay */
84
#define DEF_SOF_RAA             0    /* REQ/ACK assertion delay */
85
#define DEF_ETM                 0    /* CNTLREG1, ext. timing mode */
86
#define DEF_PERE                1    /* CNTLREG1, parity error reporting */
87
#define DEF_CLKF                0    /* CLKFREG,  0=40 Mhz */
88
#define DEF_ENF                 1    /* CNTLREG2, enable features */
89
#define DEF_ADIDCHK             0    /* CNTLREG3, additional ID check */
90
#define DEF_FASTSCSI            1    /* CNTLREG3, fast SCSI */
91
#define DEF_FASTCLK             1    /* CNTLREG3, fast clocking, 5 MB/sec at 40MHz chip clk */
92
#define DEF_GLITCH              1    /* CNTLREG4, glitch eater, 0=12ns, 1=35ns, 2=25ns, 3=off */
93
#define DEF_PWD                 0    /* CNTLREG4, reduced power feature */
94
#define DEF_RAE                 0    /* CNTLREG4, RAE active negation on REQ, ACK only */
95
#define DEF_RADE                1    /* 1CNTLREG4, active negation on REQ, ACK and data */
96
 
97
/*** PCI block ***/
98
/* standard registers are defined in <linux/pci.h> */
99
#ifndef PCI_VENDOR_ID_AMD
100
#define PCI_VENDOR_ID_AMD       0x1022
101
#define PCI_DEVICE_ID_AMD_SCSI  0x2020
102
#endif
103
#define PCI_BASE_MASK           0xFFFFFFE0
104
#define PCI_COMMAND_PERREN      0x40
105
#define PCI_SCRATCH_REG_0       0x40    /* 16 bits */
106
#define PCI_SCRATCH_REG_1       0x42    /* 16 bits */
107
#define PCI_SCRATCH_REG_2       0x44    /* 16 bits */
108
#define PCI_SCRATCH_REG_3       0x46    /* 16 bits */
109
#define PCI_SCRATCH_REG_4       0x48    /* 16 bits */
110
#define PCI_SCRATCH_REG_5       0x4A    /* 16 bits */
111
#define PCI_SCRATCH_REG_6       0x4C    /* 16 bits */
112
#define PCI_SCRATCH_REG_7       0x4E    /* 16 bits */
113
 
114
/*** SCSI block ***/
115
#define CTCLREG                 0x00    /* r    current transf. count, low byte    */
116
#define CTCMREG                 0x04    /* r    current transf. count, middle byte */
117
#define CTCHREG                 0x38    /* r    current transf. count, high byte   */
118
#define STCLREG                 0x00    /* w    start transf. count, low byte      */
119
#define STCMREG                 0x04    /* w    start transf. count, middle byte   */
120
#define STCHREG                 0x38    /* w    start transf. count, high byte     */
121
#define FFREG                   0x08    /* rw   SCSI FIFO reg.                     */
122
#define STIMREG                 0x14    /* w    SCSI timeout reg.                  */
123
 
124
#define SDIDREG                 0x10    /* w    SCSI destination ID reg.           */
125
#define SDIREG_MASK             0x07    /* mask                                    */
126
 
127
#define STPREG                  0x18    /* w    synchronous transf. period reg.    */
128
#define STPREG_STP              0x1F    /* synchr. transfer period                 */
129
 
130
#define CLKFREG                 0x24    /* w    clock factor reg.                  */
131
#define CLKFREG_MASK            0x07    /* mask                                    */
132
 
133
#define CMDREG                  0x0C    /* rw   SCSI command reg.                  */
134
#define CMDREG_DMA              0x80    /* set DMA mode (set together with opcodes below) */
135
#define CMDREG_IT               0x10    /* information transfer                    */
136
#define CMDREG_ICCS             0x11    /* initiator command complete steps        */
137
#define CMDREG_MA               0x12    /* message accepted                        */
138
#define CMDREG_TPB              0x98    /* transfer pad bytes, DMA mode only       */
139
#define CMDREG_SATN             0x1A    /* set ATN                                 */
140
#define CMDREG_RATN             0x1B    /* reset ATN                               */
141
#define CMDREG_SOAS             0x41    /* select without ATN steps                */
142
#define CMDREG_SAS              0x42    /* select with ATN steps (1 msg byte)      */
143
#define CMDREG_SASS             0x43    /* select with ATN and stop steps          */
144
#define CMDREG_ESR              0x44    /* enable selection/reselection            */
145
#define CMDREG_DSR              0x45    /* disable selection/reselection           */
146
#define CMDREG_SA3S             0x46    /* select with ATN 3 steps  (3 msg bytes)  */
147
#define CMDREG_NOP              0x00    /* no operation                            */
148
#define CMDREG_CFIFO            0x01    /* clear FIFO                              */
149
#define CMDREG_RDEV             0x02    /* reset device                            */
150
#define CMDREG_RBUS             0x03    /* reset SCSI bus                          */
151
 
152
#define STATREG                 0x10    /* r    SCSI status reg.                   */
153
#define STATREG_INT             0x80    /* SCSI interrupt condition detected       */
154
#define STATREG_IOE             0x40    /* SCSI illegal operation error detected   */
155
#define STATREG_PE              0x20    /* SCSI parity error detected              */
156
#define STATREG_CTZ             0x10    /* CTC reg decremented to zero             */
157
#define STATREG_MSG             0x04    /* SCSI MSG phase (latched?)               */
158
#define STATREG_CD              0x02    /* SCSI C/D phase (latched?)               */
159
#define STATREG_IO              0x01    /* SCSI I/O phase (latched?)               */
160
#define STATREG_PHASE           0x07    /* SCSI phase mask                         */
161
 
162
#define INSTREG                 0x14    /* r    interrupt status reg.              */
163
#define INSTREG_SRST            0x80    /* SCSI reset detected                     */
164
#define INSTREG_ICMD            0x40    /* SCSI invalid command detected           */
165
#define INSTREG_DIS             0x20    /* target disconnected or sel/resel timeout*/
166
#define INSTREG_SR              0x10    /* device on bus has service request       */
167
#define INSTREG_SO              0x08    /* successful operation                    */
168
#define INSTREG_RESEL           0x04    /* device reselected as initiator          */
169
 
170
#define ISREG                   0x18    /* r    internal state reg.                */
171
#define ISREG_SOF               0x08    /* synchronous offset flag (act. low)      */
172
#define ISREG_IS                0x07    /* status of intermediate op.              */
173
#define ISREG_OK_NO_STOP        0x04    /* selection successful                    */
174
#define ISREG_OK_STOP           0x01    /* selection successful                    */
175
 
176
#define CFIREG                  0x1C    /* r    current FIFO/internal state reg.   */
177
#define CFIREG_IS               0xE0    /* status of intermediate op.              */
178
#define CFIREG_CF               0x1F    /* number of bytes in SCSI FIFO            */
179
 
180
#define SOFREG                  0x1C    /* w    synchr. offset reg.                */
181
#define SOFREG_RAD              0xC0    /* REQ/ACK deassertion delay (sync.)       */
182
#define SOFREG_RAA              0x30    /* REQ/ACK assertion delay (sync.)         */
183
#define SOFREG_SO               0x0F    /* synch. offset (sync.)                   */
184
 
185
#define CNTLREG1                0x20    /* rw   control register one               */
186
#define CNTLREG1_ETM            0x80    /* set extended timing mode                */
187
#define CNTLREG1_DISR           0x40    /* disable interrupt on SCSI reset         */
188
#define CNTLREG1_PERE           0x10    /* enable parity error reporting           */
189
#define CNTLREG1_SID            0x07    /* host adapter SCSI ID                    */
190
 
191
#define CNTLREG2                0x2C    /* rw   control register two               */
192
#define CNTLREG2_ENF            0x40    /* enable features                         */
193
 
194
#define CNTLREG3                0x30    /* rw   control register three             */ 
195
#define CNTLREG3_ADIDCHK        0x80    /* additional ID check                     */
196
#define CNTLREG3_FASTSCSI       0x10    /* fast SCSI                               */
197
#define CNTLREG3_FASTCLK        0x08    /* fast SCSI clocking                      */
198
 
199
#define CNTLREG4                0x34    /* rw   control register four              */ 
200
#define CNTLREG4_GLITCH         0xC0    /* glitch eater                            */
201
#define CNTLREG4_PWD            0x20    /* reduced power feature                   */
202
#define CNTLREG4_RAE            0x08    /* write only, active negot. ctrl.         */
203
#define CNTLREG4_RADE           0x04    /* active negot. ctrl.                     */
204
#define CNTLREG4_RES            0x10    /* reserved bit, must be 1                 */
205
 
206
/*** DMA block ***/
207
#define DMACMD                  0x40    /* rw   command                            */
208
#define DMACMD_DIR              0x80    /* transfer direction (1=read from device) */
209
#define DMACMD_INTE_D           0x40    /* DMA transfer interrupt enable           */
210
#define DMACMD_INTE_P           0x20    /* page transfer interrupt enable          */
211
#define DMACMD_MDL              0x10    /* map to memory descriptor list           */
212
#define DMACMD_DIAG             0x04    /* diagnostics, set to 0                   */
213
#define DMACMD_IDLE             0x00    /* idle cmd                                */
214
#define DMACMD_BLAST            0x01    /* flush FIFO to memory                    */
215
#define DMACMD_ABORT            0x02    /* terminate DMA                           */
216
#define DMACMD_START            0x03    /* start DMA                               */
217
 
218
#define DMASTATUS               0x54    /* r    status register                    */
219
#define DMASTATUS_BCMPLT        0x20    /* BLAST complete                          */
220
#define DMASTATUS_SCSIINT       0x10    /* SCSI interrupt pending                  */
221
#define DMASTATUS_DONE          0x08    /* DMA transfer terminated                 */
222
#define DMASTATUS_ABORT         0x04    /* DMA transfer aborted                    */
223
#define DMASTATUS_ERROR         0x02    /* DMA transfer error                      */
224
#define DMASTATUS_PWDN          0x02    /* power down indicator                    */
225
 
226
#define DMASTC                  0x44    /* rw   starting transfer count            */
227
#define DMASPA                  0x48    /* rw   starting physical address          */
228
#define DMAWBC                  0x4C    /* r    working byte counter               */
229
#define DMAWAC                  0x50    /* r    working address counter            */
230
#define DMASMDLA                0x58    /* rw   starting MDL address               */
231
#define DMAWMAC                 0x5C    /* r    working MDL counter                */
232
 
233
/*** SCSI phases ***/
234
#define PHASE_MSGIN             0x07
235
#define PHASE_MSGOUT            0x06
236
#define PHASE_RES_1             0x05
237
#define PHASE_RES_0             0x04
238
#define PHASE_STATIN            0x03
239
#define PHASE_CMDOUT            0x02
240
#define PHASE_DATAIN            0x01
241
#define PHASE_DATAOUT           0x00
242
 
243
struct AM53C974_hostdata {
244
    volatile unsigned       in_reset:1;          /* flag, says bus reset pending */
245
    volatile unsigned       aborted:1;           /* flag, says aborted */
246
    volatile unsigned       selecting:1;         /* selection started, but not yet finished */
247
    volatile unsigned       disconnecting: 1;    /* disconnection started, but not yet finished */
248
    volatile unsigned       dma_busy:1;          /* dma busy when service request for info transfer received */
249
    volatile unsigned  char msgout[10];          /* message to output in MSGOUT_PHASE */
250
    volatile unsigned  char last_message[10];   /* last message OUT */
251
    volatile Scsi_Cmnd      *issue_queue;       /* waiting to be issued */
252
    volatile Scsi_Cmnd      *disconnected_queue;        /* waiting for reconnect */
253
    volatile Scsi_Cmnd      *sel_cmd;            /* command for selection */
254
    volatile Scsi_Cmnd      *connected;         /* currently connected command */
255
    volatile unsigned  char busy[8];            /* index = target, bit = lun */
256
    unsigned  char sync_per[8];         /* synchronous transfer period (in effect) */
257
    unsigned  char sync_off[8];         /* synchronous offset (in effect) */
258
    unsigned  char sync_neg[8];         /* sync. negotiation performed (in effect) */
259
    unsigned  char sync_en[8];          /* sync. negotiation performed (in effect) */
260
    unsigned  char max_rate[8];         /* max. transfer rate (setup) */
261
    unsigned  char max_offset[8];       /* max. sync. offset (setup), only valid if corresponding sync_en is nonzero */
262
    };
263
 
264
#define AM53C974 { \
265
    NULL,                       /* pointer to next in list                      */  \
266
    NULL,                       /* long * usage_count                           */  \
267
    NULL,                       /* struct proc_dir_entry *proc_dir              */ \
268
    NULL,                       /* int (*proc_info)(char *, char **, off_t, int, int, int); */ \
269
    "AM53C974",                 /* name                                         */  \
270
    AM53C974_detect,            /* int (* detect)(struct SHT *)                 */  \
271
    NULL,                       /* int (*release)(struct Scsi_Host *)           */  \
272
    AM53C974_info,              /* const char *(* info)(struct Scsi_Host *)     */  \
273
    AM53C974_command,           /* int (* command)(Scsi_Cmnd *)                 */  \
274
    AM53C974_queue_command,     /* int (* queuecommand)(Scsi_Cmnd *,                \
275
                                           void (*done)(Scsi_Cmnd *))           */  \
276
    AM53C974_abort,             /* int (* abort)(Scsi_Cmnd *)                   */  \
277
    AM53C974_reset,             /* int (* reset)(Scsi_Cmnd *)                   */  \
278
    NULL,                       /* int (* slave_attach)(int, int)               */  \
279
    scsicam_bios_param,         /* int (* bios_param)(Disk *, int, int[])       */  \
280
    12,                         /* can_queue                                    */  \
281
    -1,                         /* this_id                                      */  \
282
    SG_ALL,                     /* sg_tablesize                                 */  \
283
    1,                          /* cmd_per_lun                                  */  \
284
    0,                           /* present, i.e. how many adapters of this kind */  \
285
    0,                           /* unchecked_isa_dma                            */  \
286
    DISABLE_CLUSTERING          /* use_clustering                               */  \
287
    }
288
 
289
void AM53C974_setup(char *str, int *ints);
290
int AM53C974_detect(Scsi_Host_Template *tpnt);
291
int AM53C974_biosparm(Disk *disk, int dev, int *info_array);
292
const char *AM53C974_info(struct Scsi_Host *);
293
int AM53C974_command(Scsi_Cmnd *SCpnt);
294
int AM53C974_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *));
295
int AM53C974_abort(Scsi_Cmnd *cmd);
296
int AM53C974_reset (Scsi_Cmnd *cmd, unsigned int flags);
297
 
298
#define AM53C974_local_declare()        unsigned long io_port
299
#define AM53C974_setio(instance)        io_port = instance->io_port
300
#define AM53C974_read_8(addr)           inb(io_port + (addr))
301
#define AM53C974_write_8(addr,x)        outb((x), io_port + (addr))
302
#define AM53C974_read_16(addr)          inw(io_port + (addr))
303
#define AM53C974_write_16(addr,x)       outw((x), io_port + (addr))
304
#define AM53C974_read_32(addr)          inl(io_port + (addr))
305
#define AM53C974_write_32(addr,x)       outl((x), io_port + (addr))
306
 
307
#define AM53C974_poll_int()             { do { statreg = AM53C974_read_8(STATREG); } \
308
                                             while (!(statreg & STATREG_INT)) ; \
309
                                          AM53C974_read_8(INSTREG) ; } /* clear int */
310
#define AM53C974_cfifo()                (AM53C974_read_8(CFIREG) & CFIREG_CF)
311
 
312
/* These are "special" values for the tag parameter passed to AM53C974_select. */
313
#define TAG_NEXT        -1      /* Use next free tag */
314
#define TAG_NONE        -2      /* Establish I_T_L nexus instead of I_T_L_Q
315
                                 * even on SCSI-II devices */
316
 
317
/************ LILO overrides *************/
318
typedef struct _override_t {
319
    int host_scsi_id;                   /* SCSI id of the bus controller */
320
    int target_scsi_id;                 /* SCSI id of target */
321
    int max_rate;                       /* max. transfer rate */
322
    int max_offset;                     /* max. sync. offset, 0 = asynchronous */
323
    } override_t;
324
 
325
/************ PCI stuff *************/
326
#define AM53C974_PCIREG_OPEN()                    outb(0xF1, 0xCF8); outb(0, 0xCFA)
327
#define AM53C974_PCIREG_CLOSE()                   outb(0, 0xCF8)
328
#define AM53C974_PCIREG_READ_BYTE(instance,a)     ( inb((a) + (instance)->io_port) )
329
#define AM53C974_PCIREG_READ_WORD(instance,a)     ( inw((a) + (instance)->io_port) )
330
#define AM53C974_PCIREG_READ_DWORD(instance,a)    ( inl((a) + (instance)->io_port) )
331
#define AM53C974_PCIREG_WRITE_BYTE(instance,x,a)  ( outb((x), (a) + (instance)->io_port) )
332
#define AM53C974_PCIREG_WRITE_WORD(instance,x,a)  ( outw((x), (a) + (instance)->io_port) )
333
#define AM53C974_PCIREG_WRITE_DWORD(instance,x,a) ( outl((x), (a) + (instance)->io_port) )
334
 
335
typedef struct _pci_config_t {
336
    /* start of official PCI config space header */
337
    union {
338
        unsigned int device_vendor;
339
        struct {
340
          unsigned short vendor;
341
          unsigned short device;
342
          } dv;
343
        } dv_id;
344
#define _device_vendor dv_id.device_vendor
345
#define _vendor dv_id.dv.vendor
346
#define _device dv_id.dv.device
347
    union {
348
        unsigned int status_command;
349
        struct {
350
          unsigned short command;
351
          unsigned short status;
352
          } sc;
353
        } stat_cmd;
354
#define _status_command stat_cmd.status_command
355
#define _command stat_cmd.sc.command
356
#define _status  stat_cmd.sc.status
357
    union {
358
        unsigned int class_revision;
359
        struct {
360
            unsigned char rev_id;
361
            unsigned char prog_if;
362
            unsigned char sub_class;
363
            unsigned char base_class;
364
        } cr;
365
    } class_rev;
366
#define _class_revision class_rev.class_revision
367
#define _rev_id     class_rev.cr.rev_id
368
#define _prog_if    class_rev.cr.prog_if
369
#define _sub_class  class_rev.cr.sub_class
370
#define _base_class class_rev.cr.base_class
371
    union {
372
        unsigned int bist_header_latency_cache;
373
        struct {
374
            unsigned char cache_line_size;
375
            unsigned char latency_timer;
376
            unsigned char header_type;
377
            unsigned char bist;
378
        } bhlc;
379
    } bhlc;
380
#define _bist_header_latency_cache bhlc.bist_header_latency_cache
381
#define _cache_line_size bhlc.bhlc.cache_line_size
382
#define _latency_timer   bhlc.bhlc.latency_timer
383
#define _header_type     bhlc.bhlc.header_type
384
#define _bist            bhlc.bhlc.bist
385
    unsigned int _base0;
386
    unsigned int _base1;
387
    unsigned int _base2;
388
    unsigned int _base3;
389
    unsigned int _base4;
390
    unsigned int _base5;
391
    unsigned int rsvd1;
392
    unsigned int rsvd2;
393
    unsigned int _baserom;
394
    unsigned int rsvd3;
395
    unsigned int rsvd4;
396
    union {
397
        unsigned int max_min_ipin_iline;
398
        struct {
399
            unsigned char int_line;
400
            unsigned char int_pin;
401
            unsigned char min_gnt;
402
            unsigned char max_lat;
403
        } mmii;
404
    } mmii;
405
#define _max_min_ipin_iline mmii.max_min_ipin_iline
406
#define _int_line mmii.mmii.int_line
407
#define _int_pin  mmii.mmii.int_pin
408
#define _min_gnt  mmii.mmii.min_gnt
409
#define _max_lat  mmii.mmii.max_lat
410
    /* end of official PCI config space header */
411
    unsigned short _ioaddr; /* config type 1 - private I/O addr    */
412
    unsigned int _pcibus;  /* config type 2 - private bus id      */
413
    unsigned int _cardnum; /* config type 2 - private card number */
414
} pci_config_t;
415
 
416
#endif /* AM53C974_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.