blob: 8aaf8edd80408d274faa0ec1bb45c6c20afb4afc [file] [log] [blame]
Nico Huber11136c22023-05-01 12:00:09 +02001/*
2 * This file is part of the flashprog project.
3 *
4 * Copyright (C) 2023 Nico Huber <nico.h@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 */
16
17#ifndef __PROBING_H__
18#define __PROBING_H__ 1
19
Nico Huberaf9d7382023-05-01 13:33:26 +020020#include <stddef.h>
Nico Huber11136c22023-05-01 12:00:09 +020021#include <stdint.h>
22
23enum id_type {
24 ID_FIXME = 0,
25 ID_NONE,
26
27 ID_82802AB,
28 ID_EDI,
29 ID_EN29LV640B,
30 ID_JEDEC,
31 ID_JEDEC_29GL,
32 ID_OPAQUE,
33 ID_SPI_AT25F,
34 ID_SPI_RDID,
Nico Huber11136c22023-05-01 12:00:09 +020035 ID_SPI_REMS,
36 ID_SPI_RES1,
37 ID_SPI_RES2,
38 ID_SPI_RES3,
39 ID_SPI_SFDP,
40 ID_SPI_ST95,
41 ID_W29EE011,
42};
43
44/*
45 * With 32bit manufacture_id and model_id we can cover IDs up to
46 * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's
47 * Identification code.
48 */
49struct id_info {
Nico Huberaf9d7382023-05-01 13:33:26 +020050 union {
51 uint32_t manufacture;
52 uint32_t id1;
53 };
54 union {
55 uint32_t model;
56 uint32_t id2;
57 };
Nico Huber11136c22023-05-01 12:00:09 +020058 enum id_type type;
59};
60
Nico Huberaf9d7382023-05-01 13:33:26 +020061struct id_info_ext {
62 struct id_info id;
63 void *ext;
64};
65
66struct found_id {
67 struct found_id *next;
68 struct id_info_ext info;
69};
70
71struct flashprog_chip;
72struct master_common;
73
74struct bus_probe {
75 enum id_type type;
76 struct found_id *(*run)(const struct bus_probe *, const struct master_common *);
77 void *arg;
78};
79
80struct bus_probing {
81 unsigned int probe_count;
82 const struct bus_probe *probes;
83 bool (*match)(const struct flashprog_chip *, const struct id_info_ext *);
84};
85
86struct flashprog_flashctx;
87int probe_buses(struct flashprog_flashctx *);
88
Nico Huber11136c22023-05-01 12:00:09 +020089#endif /* !__PROBING_H__ */