source: svn/trunk/newcon3bcm2_21bu/toolchain/mipsel-linux-uclibc/include/linux/cyclades.h @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 18.2 KB
Line 
1/* $Revision: 1.5 $$Date: 2005-03-25 19:09:14 +0100 (Fri, 25 Mar 2005) $
2 * linux/include/linux/cyclades.h
3 *
4 * This file was initially written by
5 * Randolph Bentson <bentson@grieg.seaslug.org> and is maintained by
6 * Ivan Passos <ivan@cyclades.com>.
7 *
8 * This file contains the general definitions for the cyclades.c driver
9 *$Log: cyclades.h,v $
10 *Revision 1.5  2004/10/24 16:29:31  mmazur
11 *- remove __force and __iomem
12 *
13 *Revision 1.4  2004/10/22 15:56:17  mmazur
14 *- 2.6.9 update
15 *
16 *Revision 1.3  2004/03/27 16:03:40  mmazur
17 *- up to 2.6.4
18 *
19 *Revision 1.2  2004/01/01 18:23:40  mmazur
20 *- Total Infor^H^H^H^H^HKernel Block Removal part 1
21 *- after finishing this I will make a script to test each and every header
22 *  for getting parsed correctly by a C compiler
23 *
24 *Revision 1.1.1.1  2003/12/15 18:46:58  mmazur
25 *Initial from debian
26 *
27 *Revision 3.1  2000/04/19 18:52:52  ivan
28 *converted address fields to unsigned long and added fields for physical
29 *addresses on cyclades_card structure;
30 *
31 *Revision 3.0  1998/11/02 14:20:59  ivan
32 *added nports field on cyclades_card structure;
33 *
34 *Revision 2.5  1998/08/03 16:57:01  ivan
35 *added cyclades_idle_stats structure;
36 *
37 *Revision 2.4  1998/06/01 12:09:53  ivan
38 *removed closing_wait2 from cyclades_port structure;
39 *
40 *Revision 2.3  1998/03/16 18:01:12  ivan
41 *changes in the cyclades_port structure to get it closer to the
42 *standard serial port structure;
43 *added constants for new ioctls;
44 *
45 *Revision 2.2  1998/02/17 16:50:00  ivan
46 *changes in the cyclades_port structure (addition of shutdown_wait and
47 *chip_rev variables);
48 *added constants for new ioctls and for CD1400 rev. numbers.
49 *
50 *Revision 2.1  1997/10/24 16:03:00  ivan
51 *added rflow (which allows enabling the CD1400 special flow control
52 *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to
53 *cyclades_port structure;
54 *added Alpha support
55 *
56 *Revision 2.0  1997/06/30 10:30:00  ivan
57 *added some new doorbell command constants related to IOCTLW and
58 *UART error signaling
59 *
60 *Revision 1.8  1997/06/03 15:30:00  ivan
61 *added constant ZFIRM_HLT
62 *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin)
63 *
64 *Revision 1.7  1997/03/26 10:30:00  daniel
65 *new entries at the end of cyclades_port struct to reallocate
66 *variables illegally allocated within card memory.
67 *
68 *Revision 1.6  1996/09/09 18:35:30  bentson
69 *fold in changes for Cyclom-Z -- including structures for
70 *communicating with board as well modest changes to original
71 *structures to support new features.
72 *
73 *Revision 1.5  1995/11/13 21:13:31  bentson
74 *changes suggested by Michael Chastain <mec@duracef.shout.net>
75 *to support use of this file in non-kernel applications
76 *
77 *
78 */
79
80#ifndef _LINUX_CYCLADES_H
81#define _LINUX_CYCLADES_H
82
83struct cyclades_monitor {
84        unsigned long           int_count;
85        unsigned long           char_count;
86        unsigned long           char_max;
87        unsigned long           char_last;
88};
89
90/*
91 * These stats all reflect activity since the device was last initialized.
92 * (i.e., since the port was opened with no other processes already having it
93 * open)
94 */
95struct cyclades_idle_stats {
96    time_t         in_use;      /* Time device has been in use (secs) */
97    time_t         recv_idle;   /* Time since last char received (secs) */
98    time_t         xmit_idle;   /* Time since last char transmitted (secs) */
99    unsigned long  recv_bytes;  /* Bytes received */
100    unsigned long  xmit_bytes;  /* Bytes transmitted */
101    unsigned long  overruns;    /* Input overruns */
102    unsigned long  frame_errs;  /* Input framing errors */
103    unsigned long  parity_errs; /* Input parity errors */
104};
105
106#define CYCLADES_MAGIC  0x4359
107
108#define CYGETMON                0x435901
109#define CYGETTHRESH             0x435902
110#define CYSETTHRESH             0x435903
111#define CYGETDEFTHRESH          0x435904
112#define CYSETDEFTHRESH          0x435905
113#define CYGETTIMEOUT            0x435906
114#define CYSETTIMEOUT            0x435907
115#define CYGETDEFTIMEOUT         0x435908
116#define CYSETDEFTIMEOUT         0x435909
117#define CYSETRFLOW              0x43590a
118#define CYGETRFLOW              0x43590b
119#define CYSETRTSDTR_INV         0x43590c
120#define CYGETRTSDTR_INV         0x43590d
121#define CYZSETPOLLCYCLE         0x43590e
122#define CYZGETPOLLCYCLE         0x43590f
123#define CYGETCD1400VER          0x435910
124#define CYGETCARDINFO           0x435911
125#define CYSETWAIT               0x435912
126#define CYGETWAIT               0x435913
127
128/*************** CYCLOM-Z ADDITIONS ***************/
129
130#define CZIOC           ('M' << 8)
131#define CZ_NBOARDS      (CZIOC|0xfa)
132#define CZ_BOOT_START   (CZIOC|0xfb)
133#define CZ_BOOT_DATA    (CZIOC|0xfc)
134#define CZ_BOOT_END     (CZIOC|0xfd)
135#define CZ_TEST         (CZIOC|0xfe)
136
137#define CZ_DEF_POLL     (HZ/25)
138
139#define MAX_BOARD       4       /* Max number of boards */
140#define MAX_DEV         256     /* Max number of ports total */
141#define CYZ_MAX_SPEED   921600
142
143#define CYZ_FIFO_SIZE   16
144
145#define CYZ_BOOT_NWORDS 0x100
146struct CYZ_BOOT_CTRL {
147        unsigned short  nboard;
148        int             status[MAX_BOARD];
149        int             nchannel[MAX_BOARD];
150        int             fw_rev[MAX_BOARD];
151        unsigned long   offset;
152        unsigned long   data[CYZ_BOOT_NWORDS];
153};
154
155
156#ifndef DP_WINDOW_SIZE
157/* #include "cyclomz.h" */
158/****************** ****************** *******************/
159/*
160 *      The data types defined below are used in all ZFIRM interface
161 *      data structures. They accomodate differences between HW
162 *      architectures and compilers.
163 */
164
165#if defined(__alpha__)
166typedef unsigned long   ucdouble;       /* 64 bits, unsigned */
167typedef unsigned int    uclong;         /* 32 bits, unsigned */
168#else
169typedef unsigned long   uclong;         /* 32 bits, unsigned */
170#endif
171typedef unsigned short  ucshort;        /* 16 bits, unsigned */
172typedef unsigned char   ucchar;         /* 8 bits, unsigned */
173
174/*
175 *      Memory Window Sizes
176 */
177
178#define DP_WINDOW_SIZE          (0x00080000)    /* window size 512 Kb */
179#define ZE_DP_WINDOW_SIZE       (0x00100000)    /* window size 1 Mb (Ze and
180                                                  8Zo V.2 */
181#define CTRL_WINDOW_SIZE        (0x00000080)    /* runtime regs 128 bytes */
182
183/*
184 *      CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver
185 *      normally will access only interested on the fpga_id, fpga_version,
186 *      start_cpu and stop_cpu.
187 */
188
189struct  CUSTOM_REG {
190        uclong  fpga_id;                /* FPGA Identification Register */
191        uclong  fpga_version;           /* FPGA Version Number Register */
192        uclong  cpu_start;              /* CPU start Register (write) */
193        uclong  cpu_stop;               /* CPU stop Register (write) */
194        uclong  misc_reg;               /* Miscelaneous Register */
195        uclong  idt_mode;               /* IDT mode Register */
196        uclong  uart_irq_status;        /* UART IRQ status Register */
197        uclong  clear_timer0_irq;       /* Clear timer interrupt Register */
198        uclong  clear_timer1_irq;       /* Clear timer interrupt Register */
199        uclong  clear_timer2_irq;       /* Clear timer interrupt Register */
200        uclong  test_register;          /* Test Register */
201        uclong  test_count;             /* Test Count Register */
202        uclong  timer_select;           /* Timer select register */
203        uclong  pr_uart_irq_status;     /* Prioritized UART IRQ stat Reg */
204        uclong  ram_wait_state;         /* RAM wait-state Register */
205        uclong  uart_wait_state;        /* UART wait-state Register */
206        uclong  timer_wait_state;       /* timer wait-state Register */
207        uclong  ack_wait_state;         /* ACK wait State Register */
208};
209
210/*
211 *      RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime
212 *      registers. This structure can be used to access the 9060 registers
213 *      (memory mapped).
214 */
215
216struct RUNTIME_9060 {
217        uclong  loc_addr_range; /* 00h - Local Address Range */
218        uclong  loc_addr_base;  /* 04h - Local Address Base */
219        uclong  loc_arbitr;     /* 08h - Local Arbitration */
220        uclong  endian_descr;   /* 0Ch - Big/Little Endian Descriptor */
221        uclong  loc_rom_range;  /* 10h - Local ROM Range */
222        uclong  loc_rom_base;   /* 14h - Local ROM Base */
223        uclong  loc_bus_descr;  /* 18h - Local Bus descriptor */
224        uclong  loc_range_mst;  /* 1Ch - Local Range for Master to PCI */
225        uclong  loc_base_mst;   /* 20h - Local Base for Master PCI */
226        uclong  loc_range_io;   /* 24h - Local Range for Master IO */
227        uclong  pci_base_mst;   /* 28h - PCI Base for Master PCI */
228        uclong  pci_conf_io;    /* 2Ch - PCI configuration for Master IO */
229        uclong  filler1;        /* 30h */
230        uclong  filler2;        /* 34h */
231        uclong  filler3;        /* 38h */
232        uclong  filler4;        /* 3Ch */
233        uclong  mail_box_0;     /* 40h - Mail Box 0 */
234        uclong  mail_box_1;     /* 44h - Mail Box 1 */
235        uclong  mail_box_2;     /* 48h - Mail Box 2 */
236        uclong  mail_box_3;     /* 4Ch - Mail Box 3 */
237        uclong  filler5;        /* 50h */
238        uclong  filler6;        /* 54h */
239        uclong  filler7;        /* 58h */
240        uclong  filler8;        /* 5Ch */
241        uclong  pci_doorbell;   /* 60h - PCI to Local Doorbell */
242        uclong  loc_doorbell;   /* 64h - Local to PCI Doorbell */
243        uclong  intr_ctrl_stat; /* 68h - Interrupt Control/Status */
244        uclong  init_ctrl;      /* 6Ch - EEPROM control, Init Control, etc */
245};
246
247/* Values for the Local Base Address re-map register */
248
249#define WIN_RAM         0x00000001L     /* set the sliding window to RAM */
250#define WIN_CREG        0x14000001L     /* set the window to custom Registers */
251
252/* Values timer select registers */
253
254#define TIMER_BY_1M     0x00            /* clock divided by 1M */
255#define TIMER_BY_256K   0x01            /* clock divided by 256k */
256#define TIMER_BY_128K   0x02            /* clock divided by 128k */
257#define TIMER_BY_32K    0x03            /* clock divided by 32k */
258
259/****************** ****************** *******************/
260#endif
261
262#ifndef ZFIRM_ID
263/* #include "zfwint.h" */
264/****************** ****************** *******************/
265/*
266 *      This file contains the definitions for interfacing with the
267 *      Cyclom-Z ZFIRM Firmware.
268 */
269
270/* General Constant definitions */
271
272#define MAX_CHAN        64              /* max number of channels per board */
273
274/* firmware id structure (set after boot) */
275
276#define ID_ADDRESS      0x00000180L     /* signature/pointer address */
277#define ZFIRM_ID        0x5557465AL     /* ZFIRM/U signature */
278#define ZFIRM_HLT       0x59505B5CL     /* ZFIRM needs external power supply */
279#define ZFIRM_RST       0x56040674L     /* RST signal (due to FW reset) */
280
281#define ZF_TINACT_DEF   1000            /* default inactivity timeout
282                                           (1000 ms) */
283#define ZF_TINACT       ZF_TINACT_DEF
284
285struct  FIRM_ID {
286        uclong  signature;              /* ZFIRM/U signature */
287        uclong  zfwctrl_addr;           /* pointer to ZFW_CTRL structure */
288};
289
290/* Op. System id */
291
292#define C_OS_LINUX      0x00000030      /* generic Linux system */
293
294/* channel op_mode */
295
296#define C_CH_DISABLE    0x00000000      /* channel is disabled */
297#define C_CH_TXENABLE   0x00000001      /* channel Tx enabled */
298#define C_CH_RXENABLE   0x00000002      /* channel Rx enabled */
299#define C_CH_ENABLE     0x00000003      /* channel Tx/Rx enabled */
300#define C_CH_LOOPBACK   0x00000004      /* Loopback mode */
301
302/* comm_parity - parity */
303
304#define C_PR_NONE       0x00000000      /* None */
305#define C_PR_ODD        0x00000001      /* Odd */
306#define C_PR_EVEN       0x00000002      /* Even */
307#define C_PR_MARK       0x00000004      /* Mark */
308#define C_PR_SPACE      0x00000008      /* Space */
309#define C_PR_PARITY     0x000000ff
310
311#define C_PR_DISCARD    0x00000100      /* discard char with frame/par error */
312#define C_PR_IGNORE     0x00000200      /* ignore frame/par error */
313
314/* comm_data_l - data length and stop bits */
315
316#define C_DL_CS5        0x00000001
317#define C_DL_CS6        0x00000002
318#define C_DL_CS7        0x00000004
319#define C_DL_CS8        0x00000008
320#define C_DL_CS         0x0000000f
321#define C_DL_1STOP      0x00000010
322#define C_DL_15STOP     0x00000020
323#define C_DL_2STOP      0x00000040
324#define C_DL_STOP       0x000000f0
325
326/* interrupt enabling/status */
327
328#define C_IN_DISABLE    0x00000000      /* zero, disable interrupts */
329#define C_IN_TXBEMPTY   0x00000001      /* tx buffer empty */
330#define C_IN_TXLOWWM    0x00000002      /* tx buffer below LWM */
331#define C_IN_RXHIWM     0x00000010      /* rx buffer above HWM */
332#define C_IN_RXNNDT     0x00000020      /* rx no new data timeout */
333#define C_IN_MDCD       0x00000100      /* modem DCD change */
334#define C_IN_MDSR       0x00000200      /* modem DSR change */
335#define C_IN_MRI        0x00000400      /* modem RI change */
336#define C_IN_MCTS       0x00000800      /* modem CTS change */
337#define C_IN_RXBRK      0x00001000      /* Break received */
338#define C_IN_PR_ERROR   0x00002000      /* parity error */
339#define C_IN_FR_ERROR   0x00004000      /* frame error */
340#define C_IN_OVR_ERROR  0x00008000      /* overrun error */
341#define C_IN_RXOFL      0x00010000      /* RX buffer overflow */
342#define C_IN_IOCTLW     0x00020000      /* I/O control w/ wait */
343#define C_IN_MRTS       0x00040000      /* modem RTS drop */
344#define C_IN_ICHAR      0x00080000
345 
346/* flow control */
347
348#define C_FL_OXX        0x00000001      /* output Xon/Xoff flow control */
349#define C_FL_IXX        0x00000002      /* output Xon/Xoff flow control */
350#define C_FL_OIXANY     0x00000004      /* output Xon/Xoff (any xon) */
351#define C_FL_SWFLOW     0x0000000f
352
353/* flow status */
354
355#define C_FS_TXIDLE     0x00000000      /* no Tx data in the buffer or UART */
356#define C_FS_SENDING    0x00000001      /* UART is sending data */
357#define C_FS_SWFLOW     0x00000002      /* Tx is stopped by received Xoff */
358
359/* rs_control/rs_status RS-232 signals */
360
361#define C_RS_PARAM      0x80000000      /* Indicates presence of parameter in
362                                           IOCTLM command */
363#define C_RS_RTS        0x00000001      /* RTS */
364#define C_RS_DTR        0x00000004      /* DTR */
365#define C_RS_DCD        0x00000100      /* CD */
366#define C_RS_DSR        0x00000200      /* DSR */
367#define C_RS_RI         0x00000400      /* RI */
368#define C_RS_CTS        0x00000800      /* CTS */
369
370/* commands Host <-> Board */
371
372#define C_CM_RESET      0x01            /* reset/flush buffers */
373#define C_CM_IOCTL      0x02            /* re-read CH_CTRL */
374#define C_CM_IOCTLW     0x03            /* re-read CH_CTRL, intr when done */
375#define C_CM_IOCTLM     0x04            /* RS-232 outputs change */
376#define C_CM_SENDXOFF   0x10            /* send Xoff */
377#define C_CM_SENDXON    0x11            /* send Xon */
378#define C_CM_CLFLOW     0x12            /* Clear flow control (resume) */
379#define C_CM_SENDBRK    0x41            /* send break */
380#define C_CM_INTBACK    0x42            /* Interrupt back */
381#define C_CM_SET_BREAK  0x43            /* Tx break on */
382#define C_CM_CLR_BREAK  0x44            /* Tx break off */
383#define C_CM_CMD_DONE   0x45            /* Previous command done */
384#define C_CM_INTBACK2   0x46            /* Alternate Interrupt back */
385#define C_CM_TINACT     0x51            /* set inactivity detection */
386#define C_CM_IRQ_ENBL   0x52            /* enable generation of interrupts */
387#define C_CM_IRQ_DSBL   0x53            /* disable generation of interrupts */
388#define C_CM_ACK_ENBL   0x54            /* enable acknowledged interrupt mode */
389#define C_CM_ACK_DSBL   0x55            /* disable acknowledged intr mode */
390#define C_CM_FLUSH_RX   0x56            /* flushes Rx buffer */
391#define C_CM_FLUSH_TX   0x57            /* flushes Tx buffer */
392#define C_CM_Q_ENABLE   0x58            /* enables queue access from the
393                                           driver */
394#define C_CM_Q_DISABLE  0x59            /* disables queue access from the
395                                           driver */
396
397#define C_CM_TXBEMPTY   0x60            /* Tx buffer is empty */
398#define C_CM_TXLOWWM    0x61            /* Tx buffer low water mark */
399#define C_CM_RXHIWM     0x62            /* Rx buffer high water mark */
400#define C_CM_RXNNDT     0x63            /* rx no new data timeout */
401#define C_CM_TXFEMPTY   0x64
402#define C_CM_ICHAR      0x65
403#define C_CM_MDCD       0x70            /* modem DCD change */
404#define C_CM_MDSR       0x71            /* modem DSR change */
405#define C_CM_MRI        0x72            /* modem RI change */
406#define C_CM_MCTS       0x73            /* modem CTS change */
407#define C_CM_MRTS       0x74            /* modem RTS drop */
408#define C_CM_RXBRK      0x84            /* Break received */
409#define C_CM_PR_ERROR   0x85            /* Parity error */
410#define C_CM_FR_ERROR   0x86            /* Frame error */
411#define C_CM_OVR_ERROR  0x87            /* Overrun error */
412#define C_CM_RXOFL      0x88            /* RX buffer overflow */
413#define C_CM_CMDERROR   0x90            /* command error */
414#define C_CM_FATAL      0x91            /* fatal error */
415#define C_CM_HW_RESET   0x92            /* reset board */
416
417/*
418 *      CH_CTRL - This per port structure contains all parameters
419 *      that control an specific port. It can be seen as the
420 *      configuration registers of a "super-serial-controller".
421 */
422
423struct CH_CTRL {
424        uclong  op_mode;        /* operation mode */
425        uclong  intr_enable;    /* interrupt masking */
426        uclong  sw_flow;        /* SW flow control */
427        uclong  flow_status;    /* output flow status */
428        uclong  comm_baud;      /* baud rate  - numerically specified */
429        uclong  comm_parity;    /* parity */
430        uclong  comm_data_l;    /* data length/stop */
431        uclong  comm_flags;     /* other flags */
432        uclong  hw_flow;        /* HW flow control */
433        uclong  rs_control;     /* RS-232 outputs */
434        uclong  rs_status;      /* RS-232 inputs */
435        uclong  flow_xon;       /* xon char */
436        uclong  flow_xoff;      /* xoff char */
437        uclong  hw_overflow;    /* hw overflow counter */
438        uclong  sw_overflow;    /* sw overflow counter */
439        uclong  comm_error;     /* frame/parity error counter */
440        uclong ichar;
441        uclong filler[7];
442};
443
444
445/*
446 *      BUF_CTRL - This per channel structure contains
447 *      all Tx and Rx buffer control for a given channel.
448 */
449
450struct  BUF_CTRL        {
451        uclong  flag_dma;       /* buffers are in Host memory */
452        uclong  tx_bufaddr;     /* address of the tx buffer */
453        uclong  tx_bufsize;     /* tx buffer size */
454        uclong  tx_threshold;   /* tx low water mark */
455        uclong  tx_get;         /* tail index tx buf */
456        uclong  tx_put;         /* head index tx buf */
457        uclong  rx_bufaddr;     /* address of the rx buffer */
458        uclong  rx_bufsize;     /* rx buffer size */
459        uclong  rx_threshold;   /* rx high water mark */
460        uclong  rx_get;         /* tail index rx buf */
461        uclong  rx_put;         /* head index rx buf */
462        uclong  filler[5];      /* filler to align structures */
463};
464
465/*
466 *      BOARD_CTRL - This per board structure contains all global
467 *      control fields related to the board.
468 */
469
470struct BOARD_CTRL {
471
472        /* static info provided by the on-board CPU */
473        uclong  n_channel;      /* number of channels */
474        uclong  fw_version;     /* firmware version */
475
476        /* static info provided by the driver */
477        uclong  op_system;      /* op_system id */
478        uclong  dr_version;     /* driver version */
479
480        /* board control area */
481        uclong  inactivity;     /* inactivity control */
482
483        /* host to FW commands */
484        uclong  hcmd_channel;   /* channel number */
485        uclong  hcmd_param;     /* pointer to parameters */
486
487        /* FW to Host commands */
488        uclong  fwcmd_channel;  /* channel number */
489        uclong  fwcmd_param;    /* pointer to parameters */
490        uclong  zf_int_queue_addr; /* offset for INT_QUEUE structure */
491
492        /* filler so the structures are aligned */
493        uclong  filler[6];
494};
495
496/* Host Interrupt Queue */
497
498#define QUEUE_SIZE      (10*MAX_CHAN)
499
500struct  INT_QUEUE {
501        unsigned char   intr_code[QUEUE_SIZE];
502        unsigned long   channel[QUEUE_SIZE];
503        unsigned long   param[QUEUE_SIZE];
504        unsigned long   put;
505        unsigned long   get;
506};
507
508/*
509 *      ZFW_CTRL - This is the data structure that includes all other
510 *      data structures used by the Firmware.
511 */
512 
513struct ZFW_CTRL {
514        struct BOARD_CTRL       board_ctrl;
515        struct CH_CTRL          ch_ctrl[MAX_CHAN];
516        struct BUF_CTRL         buf_ctrl[MAX_CHAN];
517};
518
519/****************** ****************** *******************/
520#endif
521
522/* Per card data structure */
523struct resource;
524struct cyclades_card {
525    unsigned long base_phys;
526    unsigned long ctl_phys;
527    void *base_addr;
528    void *ctl_addr;
529    int irq;
530    int num_chips;      /* 0 if card absent, -1 if Z/PCI, else Y */
531    int first_line;     /* minor number of first channel on card */
532    int nports;         /* Number of ports in the card */
533    int bus_index;      /* address shift - 0 for ISA, 1 for PCI */
534    int intr_enabled;   /* FW Interrupt flag - 0 disabled, 1 enabled */
535    struct pci_dev *pdev;
536    unsigned long filler;
537};
538
539struct cyclades_chip {
540  int filler;
541};
542
543#endif /* _LINUX_CYCLADES_H */
Note: See TracBrowser for help on using the repository browser.