blob: 18eb34768854cdc493b7d642fd0cc9dda09f0bf7 [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;
Nico Huberf3113ac2026-02-21 12:50:19 +010052 uint32_t hwversion;
Nico Huberaf9d7382023-05-01 13:33:26 +020053 uint32_t id1;
54 };
55 union {
56 uint32_t model;
57 uint32_t id2;
58 };
Nico Huber11136c22023-05-01 12:00:09 +020059 enum id_type type;
60};
61
Nico Huberaf9d7382023-05-01 13:33:26 +020062struct id_info_ext {
63 struct id_info id;
64 void *ext;
65};
66
67struct found_id {
68 struct found_id *next;
69 struct id_info_ext info;
70};
71
72struct flashprog_chip;
73struct master_common;
74
75struct bus_probe {
Nico Huberac138732026-02-28 17:42:27 +010076 unsigned int priority;
Nico Huberaf9d7382023-05-01 13:33:26 +020077 enum id_type type;
78 struct found_id *(*run)(const struct bus_probe *, const struct master_common *);
79 void *arg;
80};
81
82struct bus_probing {
83 unsigned int probe_count;
84 const struct bus_probe *probes;
85 bool (*match)(const struct flashprog_chip *, const struct id_info_ext *);
86};
87
88struct flashprog_flashctx;
89int probe_buses(struct flashprog_flashctx *);
90
Nico Huber11136c22023-05-01 12:00:09 +020091#endif /* !__PROBING_H__ */