blob: 561d6efe81804592694505fd4341bdf2abc71627 [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 {
Nico Huberac138732026-02-28 17:42:27 +010075 unsigned int priority;
Nico Huberaf9d7382023-05-01 13:33:26 +020076 enum id_type type;
77 struct found_id *(*run)(const struct bus_probe *, const struct master_common *);
78 void *arg;
79};
80
81struct bus_probing {
82 unsigned int probe_count;
83 const struct bus_probe *probes;
84 bool (*match)(const struct flashprog_chip *, const struct id_info_ext *);
85};
86
87struct flashprog_flashctx;
88int probe_buses(struct flashprog_flashctx *);
89
Nico Huber11136c22023-05-01 12:00:09 +020090#endif /* !__PROBING_H__ */