There are several things wrong.
First thing wrong, you are calling your function in the wrong manner.
You should not call setup_map (map[row][col]);
instead you should call setup_map (map);
because the array name is a pointer, array name plus [] operator fetches the contents of a particular place on the memory.
Then you need to make your prototype and your definition look the same, because the compiler will use the prototype (not the definition, if it is later) to parse if your code is correct, and will conclude things wrong if your prototype is wrong.
Now on the prototype itself:
If you REALLY need your function to expect a fixed size array, then you must use compile time constants.
Like this:
void setup_map( int map[23][9]);
or this:
#define ROWS = 23;
#define COLS = 9;
void setup_map( int map[ROWS][COLS] );
Remember that the name of the array, is a pointer.